dubbo入门--Hello World
Dubbo入門--Hello World
轉(zhuǎn)載自:http://blog.csdn.net/hanmov/article/details/66973957?locationNum=2&fps=1
- 介紹
Dubbo是阿里巴巴公司開源的一個高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過高性能的 RPC 實現(xiàn)服務(wù)的輸出和輸入功能,可以和?spring框架無縫集成。簡單來說,就是遠程服務(wù)提供接口,隱藏具體實現(xiàn),調(diào)用方通過dubbo連接到遠程服務(wù),通過接口可以調(diào)用方法進行操作或者獲取數(shù)據(jù),而不用關(guān)心具體實現(xiàn)細節(jié)。 - ?Hello World
<1>?搭建Java?maven項目,引入對應(yīng)的DubboJar包依賴
<!--Dubbo-阿里巴巴服務(wù)治理框架 Libs Begging--><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version></dependency><!--Dubbo-阿里巴巴服務(wù)治理框架 Libs Endding-->注:
<2>?實現(xiàn)DemoService和DemoServiceImpl的接口及實現(xiàn)類
dubbo是阿里開源的一個項目,但只維護到2.5.3版本,現(xiàn)在maven倉庫里面最新
的也只有這個版本,后續(xù)由dangdang團隊維護到了2.8.3版本,并命名為dubbox 地址:http://dangdangdotcom.github.io/dubbox/。
切記,這兩個版本并不兼容,筆者之前項目里面由于服務(wù)商用了dubbox,而本地一直在用dubbo2.5.3版本,一直出錯,花了很長時間才解決。
接口:package com.alibaba.dubbo.demo;public interface DemoService {String sayHello(String name); }
實現(xiàn)類:
package com.alibaba.dubbo.demo;import com.alibaba.dubbo.demo.DemoService;public class DemoServiceImpl implements DemoService {public String sayHello(String name) {return "Hello " + name; } }
<2>dubbo是跟spring無縫集成的,這里我們新建兩個配置文件,分別為:
provider.xml:模擬服務(wù)提供商
<?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"><!-- 提供方應(yīng)用信息,用于計算依賴關(guān)系 -->
<dubbo:application name="hello-world-app" /><!-- 使用multicast廣播注冊中心暴露服務(wù)地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" /><!-- 用dubbo協(xié)議在20880端口暴露服務(wù) -->
<dubbo:protocol name="dubbo" port="20880" /><!-- 聲明需要暴露的服務(wù)接口 -->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" /><!-- 和本地bean一樣實現(xiàn)服務(wù) -->
<bean id="demoService" class="com.alibaba.dubbo.demo.DemoServiceImpl" /></beans>
dubbo:registry定義注冊中心和對外暴露的地址(給調(diào)用方使用),默認集成的是multicast注冊中心,一般正式環(huán)境中會用zookeeper來做,這里我們簡單就用默認的。?
dubbo:service聲明暴露的服務(wù)接口,這里是我們自己寫的一個DemoService接口和DemoServiceImpl實現(xiàn)類,后面接口提供給調(diào)用方。
consumer.xml:模擬服務(wù)調(diào)用方
<?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"><!-- 消費方應(yīng)用名,用于計算依賴關(guān)系,不是匹配條件,不要與提供方一樣 -->
<dubbo:application name="consumer-of-helloworld-app" /><!-- 使用multicast廣播注冊中心暴露發(fā)現(xiàn)服務(wù)地址 -->
<dubbo:registry protocol="multicast" address="224.5.6.7:1234"/><!-- 生成遠程服務(wù)代理,可以和本地bean一樣使用demoService -->
<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" /></beans>
dubbo:registry指定服務(wù)提供方的地址和協(xié)議?
dubbo:reference根據(jù)提供方提供的接口,生成遠程服務(wù)代理
3)模擬服務(wù)提供方和調(diào)用方:?
新建Java類Provider.java:
package com.alibaba.dubbo.demo.provider;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Provider {public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"}); context.start(); System.in.read(); // 為保證服務(wù)一直開著,利用輸入流的阻塞來模擬 }
}
新建java類Consumer.java:
package com.alibaba.dubbo.demo.consumer;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.alibaba.dubbo.demo.DemoService;public class Consumer {public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"});//context.start();DemoService api = (DemoService)context.getBean("demoService"); // 獲取遠程服務(wù)代理System.out.println(api.sayHello("你好"));context.destroy();}
}
先運行Provider類,讓服務(wù)方運行,再運行Consumer類,控制臺打印“Hello 你好”信息,說明consumer通過Dubbo調(diào)用服務(wù)方的代碼成功。
總結(jié)
以上是生活随笔為你收集整理的dubbo入门--Hello World的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 起个姓胡的微信网名字
- 下一篇: c语言括号匹配的检验,检验括号匹配的算法