Dubbo最主要功能有兩個html
1 RPC調用 java
2 SOA服務治理方案git
Dubbo的架構github
Dubbo常見的註冊中心有2中,zookeeper以及redisredis
這篇文章講解的是採用的zookeeper,要求讀者對zookeeper有必定的認識。json
http://www.cnblogs.com/javabigdata/p/7491116.html zookeeper相關知識看這裏 架構
服務的提供者Provider將服務註冊到Registry,app
消費者Consumer須要從Registry中發現、監聽到服務的變更dom
Provider須要運行在Container容器中maven
Monitor(監控中心) 主要是用來對服務的調用次數統計等。
如下主要是一個快速入門,怎麼使用dubbo
咱們須要建立多個項目
Provider (服務提供者) 包括實現類 一個項目,接口定義爲一個項目
Consumer (服務消費者) 一個項目
這裏我定義一個公用的pom項目來對maven依賴作一個統一的管理
總體項目採用maven構建,使用dubbox (2.8.4) ,並提供源碼下載
======================================================================
test-parent (pom項目)主要定義jar版本信息
======================================================================
服務提供者接口定義(所謂的發佈服務,就是將接口對外暴露,生產者和消費者都是須要引用接口的,因此在這裏接口將在test-facade中提供)
這個項目主要是定義接口
主要代碼以下
@Path("/userTestService") @Consumes({ MediaType.APPLICATION_JSON, MediaType.TEXT_XML }) @Produces({ ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8 }) public interface IUserTestService { @GET User getUserTest(); @GET @Path("/testGet") public void testget(); }
註解代碼說明:
@Path:表明服務的訪問路徑,如「user」,則訪問路徑爲domain:port/context/user,在方法上註解是相對類上面的。依次展開路徑便可。
@POST:服務請求的方式,支持POST、GET等。
@Consumes:表示將接收到的數據自動轉換爲何格式的,支持json和xml。
@Produces:表示將結果返回時候輸出爲何格式的,支持json和xml。
======================================================================
服務接口實現(通常來講,服務提供者咱們使用註解開發)
部分代碼以下
@Service @com.alibaba.dubbo.config.annotation.Service(interfaceClass = com.cc.facade.IUserTestService.class, protocol = { "rest", "dubbo" }) public class UserServImpl implements IUserTestService { @Override public User getUserTest() { User user = new User(); user.setId(1); user.setName("cc"); return user; } @Override public void testGet() { System.out.println("test=get"); } }
解釋:
@com.alibaba.dubbo.config.annotation.Service 表示將該服務註冊到dubbo上
dubbo-provider.xml 文件內容以下 ,
<!-- 引入配置文件 --> <context:property-placeholder location="classpath:config.properties" /> <dubbo:application name="${dubbox.application}" owner="programmer" organization="dubbox" /> <!-- zookeeper註冊中心 --> <dubbo:registry address="${dubbox.registry.address}" timeout="100000" /> <!- dubbo service自動掃描 --> <dubbo:annotation package="com" /> <!-- kryo實現序列化 --> <dubbo:protocol name="dubbo" host="192.168.1.7" port="20883" serialization="kryo" optimizer="com.cc.serial.SerializationOptimizerImpl" /> <!-- 發佈rest服務 --> <dubbo:protocol name="rest" host="192.168.1.7" server="${dubbox.rest.server}" port="${dubbox.rest.port}" contextpath="${dubbox.rest.contextpath}" threads="${dubbox.rest.threads}" accepts="${dubbox.rest.accepts}" /> </beans>
======================================================================
服務消費者(通常使用xml配置)
dubbo-provider.xml配置文件以下
<!-- 引入配置文件 --> <context:property-placeholder location="classpath:config.properties" /> <!-- 消費服務名稱 --> <dubbo:application name="${dubbox.application}" owner="programmer" organization="dubbox" /> <!-- zookeeper註冊中心 zookeeper://192.168.1.111:2181 --> <dubbo:registry address="${dubbox.registry.address}" timeout="30000" /> <!-- 掃描dubbox註解位置 --> <dubbo:annotation package="com.cc" /> <!-- kryo實現序列化 --> <dubbo:protocol name="dubbo" serialization="kryo" optimizer="com.cc.serial.SerializationOptimizerImpl" /> <!-- 生成遠程服務接口配置 --> <dubbo:reference interface="com.cc.facade.IUserTestService" id="testFacade" /> </beans>
最後,咱們先運行
test-service/src/test/java/ProviderTest.java 的main方法,註冊服務到zookeeper上
接着運行
test-consumer/src/test/java/ConsumerTest.java 的main方法
能夠看到控制檯打印
源碼下載:https://pan.baidu.com/s/1KdUDjJZdmftsdXW4iQoGZA
注意:
1導入源碼的時候注意修改zookeeper地址
2 dubbox並無發佈到maven中央倉庫的包,目前代碼在github上,須要本身down下來編譯,基於maven開發的。
項目GitHub地址:https://github.com/dangdangdotcom/dubbox
好了,快速入門到這裏就結束了,更多細節請看 dubbo官方用戶手冊。