在寫dubbo的helloworld前,先安裝zookeeper注冊中心,阿里文檔推薦用這個軟件。我用的操作系統是ubuntu14.0.4 ,zookeeper版本zookeeper⑶.4.8,安裝進程依照阿里提供的文檔1步步來的:
http://dubbo.io/Administrator+Guide.htm#AdministratorGuide-ZookeeperRegistryInstallation
總結安裝zookeeper的進程就是:
1/下載zookeeper,解壓任意目錄
2/將 conf/zoo_sample.cfg文件復制重命名 conf/zoo.cfg(內容不用改,由于默許的屬性值都有)
3/啟動zookeeper 命令: ./bin/zkServer.sh start
4/驗證是不是安裝成功
telnet 127.0.0.1 2181
dump
以上是zookeeper的安裝進程
如果你不想看dubbo的helloworld詳細步驟,你也能夠直接把我寫的兩個demo下載下來直接運行,項目源碼下載地址:https://pan.baidu.com/s/1bVkJ86 密碼 appw
以下是項目目錄截圖和詳細代碼
先寫服務端,新建maven項目,
HelloWorldService接口
public interface HelloWorldService {
String sayHi(String content);
}
實現類:
public class HelloWorldServiceImpl implements HelloWorldService {
public String sayHi(String content) {
return "hi "+content;
}
}
pom.xml配置
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.5</version>
<!--排除log4j必須加上-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.4.9</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
spring.xml配置:
<!-- 當前利用信息配置 ip也能夠是127.0.0.1-->
<dubbo:application name="providerDemo" />
<dubbo:registry address="zookeeper://10.57.194.128:2181" />
<!-- 聲明需要暴露的服務接口 -->
<dubbo:service interface="com.evan.customer.HelloWorldService" ref="dubboApi"/>
<!-- 本地對象實例 -->
<bean id="dubboApi" class="com.evan.dubbo.impl.HelloWorldServiceImpl" />
PrivoderTest啟動測試類:
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "spring.xml" });
System.in.read(); // 避免系統退出
}
客戶端調用項目,新建customer的maven項目
1/新建HelloWorldService接口
public interface HelloWorldService {
String sayHi(String content);
}
2/pom.xml配置
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.5</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.4.9</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
spring.xml配置:
<!-- 當前利用信息配置 -->
<dubbo:application name="providerDemo" />
<dubbo:registry address="zookeeper://10.57.194.128:2181" />
<!-- 像本地實用1樣注冊對象-->
<dubbo:reference id="hello" interface="com.evan.customer.HelloWorldService"/>
客戶端測試代碼
public static void main(String[] args) {
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
HelloWorldService hw = (HelloWorldService) ac.getBean("hello");
String result = hw.sayHi("dubbo");
System.out.println(result);
}
調用成功輸出截圖:
需要注意:
1,zookeeper1定要正確安裝,啟動
2,先運行provider,再運行customer
3,helloworldservice包名要相同 (按理說應當將接口聲明單獨提出來,然后讓客戶端和服務端都依賴同1個jar包)
可能遇到的問題
1,如果provider的main方法運行兩次,會報端口占用異常。
解決辦法:查找占用端口進程對應的pid,然后kill
2,spring.xml關于dubbo的配置會出現:
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ‘dubbo:application’.
可以疏忽它,不影響運行。網上有人說可以找dubbo.xsd,我自己沒試過,而且看了評論好像也不管用。
下一篇 kafka-系列1