dubbo+zoopeeper例子
標簽(空格分隔): 分布式
dubbo
dubbo相關
dubbo是目前國內比較流行的一種分布式服務治理方案。還有一種就是esb了。一般采用的是基於Apache servicemix 和 Apache Camel和activemq這種方式。這里先介紹一下dubbo的相關。
dubbo工程一般分為3個module.一個服務者,一個消費者,一個接口。其中服務者和消費者都依賴於接口文件。工程圖類似如下
+wordspace
|-接口
|-服務者
|-消費者
新建三個maven項目,其中接口/服務者為普通java項目,以后打成jar包,采用java -jar命令運行。
- 接口的很簡單就一個接口文件:
public interface OrderInterface {
void add(String message);
void add(Object o);
void orderHasCase();
}
- 服務者也比較簡單,就是實現了接口文件。暫時不添加數據庫方面的支持。后面會有一個示例項目來做一個比較全的示例。
public class OrderServiceImpl implements OrderInterface {
public void add(String s) {
System.out.println(s);
}
public void orderHasCase() {
}
public void add(Object o) {
System.out.println("objcect:" + o);
}
}
在服務者里添加spring的配置文件,及ip信息等。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
">
<!-- 具體的實現bean -->
<bean id="orderService"
class="com.yks.service.OrderServiceImpl"/>
<!-- 提供方應用信息,用於計算依賴關系 -->
<dubbo:application name="oms_provider"/>
<!-- 使用multicast廣播注冊中心暴露服務地址
-->
<!--<dubbo:registry address="multicast://224.1.1.1:1234" />-->
<!-- 使用zookeeper注冊中心暴露服務地址 -->
<dubbo:registry address="zookeeper://192.168.3.15:2181"/>
<!-- 用dubbo協議在20880端口暴露服務 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 聲明需要暴露的服務接口 -->
<dubbo:service interface="com.yks.oms.OrderInterface"
ref="orderService"/>
</beans>
- 消費者測試程序,消費者可以是web也可以是jar形式的,這里為了方便測試,只是用了一個main方法。
public class TestMain {
public static void main(String[] args) {
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("customer.xml");
classPathXmlApplicationContext.start();
OrderInterface orderService = (OrderInterface) classPathXmlApplicationContext.getBean("orderService");
String message = "test";
orderService.add(message);
}
}
消費者配置文
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
">
<!-- consumer application name -->
<dubbo:application name="consumer-of-helloworld-app"/>
<!-- registry address, used for consumer to discover services -->
<!--<dubbo:registry address="multicast://224.1.1.1:1234" />-->
<dubbo:registry address="zookeeper://192.168.3.15:2181"/>
<dubbo:consumer timeout="5000"/>
<!-- which service to consume? -->
<dubbo:reference id="orderService"
interface="com.yks.oms.OrderInterface"/>
</beans>
- zookeeper 我這里采用的是使用zookeeper管理的。所以要安裝zookeepker.
1.下載zookeeper.tar.gz解壓
2.zk啟動時會讀取zoo.cfg配置文件,我們復制一下zookeeper文件夾下conf/zoo_sample.cfg 改名為zoo.cfg,zoo.cfg里面配置文件很簡單,就是配置一些目錄時間端口等信息。
3.啟動zk:sh bin/zkServer.sh start
啟動zk sh bin/zkServer.sh start
查看ZK服務狀態: sh bin/zkServer.sh status
停止ZK服務: sh bin/zkServer.sh stop
重啟ZK服務: sh bin/zkServer.sh restart
-
安裝dubbo-admin
去github上下載dubbo項目。按照dubbo文檔的提示去執行編譯dubbo-admin。會生成dubbo-admin.war
把war解壓到tomcat ROOT目錄下。然后修改WEB-INF下dubbo.properties里面的ip地址,還可以修改密碼等信息
修改完畢后啟動tomcat.然后訪問ip:8080看看有沒有界面。如果出現登錄則沒問題。如果沒反映就是jdk版本的問題。dubbo-admin一般運行1.5-1.7之間,你有可能用了jdk1.8,這里在重新修改一下dubbo的pom然后重新打包就可以。具體修改方法請看github-issus.如果還不可以請下載我下面給的地址里的war包。 -
啟動
啟動服務者,在dubboadmin就可以看到相應的服務對象。至此一個簡單的dubbo就搭建起來了。
代碼(dubbo-admin)都在github上了。
github地址:https://github.com/wongloong/aboutDubbo.git