一、个人理解
程序员A写了一个服务(servie),按照DUBBO的规则进行配置,程序员B、程序员C、程序员N......可以用的像程序员A一样,毫无违和感,这就是DUBBO。
都知道Socket通信。程序员A 写了一个java界堪称经典的 "Hello Word" 服务。并告诉程序员B IP和PORT ,程序员B 按照Socket的通信规则写好代码与程序员A通信,结果 "Hello Word" 便跃然控制台。这是通信,这是通信,这是通信,重要的事情说三遍。然而貌似对DUBBO的解释并没有什么卵用。醉了。
调用A (点对点)
B----------------->A
有一天程序员A,又在自己电脑上兴致勃勃的写下了一个 Print "Hello Word" 的经典、简陋服务。程序员A 觉得好的东西要懂得分享,于是乎,就将Print "Hello Word" 的经典、简陋服务注册到程序员C的电脑上,然后就告诉程序员B的注册地址(程序员C的IP和PORT),程序员B按照DUBBO的通信规则写好代码,结果 结果 "Hello Word" 便跃然控制台。
注册服务到C C用调
A----------------->C<----------------A
二、DUBBO组成
Provider 服务提供方
Consumer 服务订阅方
Registry 服务注册中心
Monitor 服务监控(统计某个服务被调用次数等)
三、代码大放送
服务端
服务:SaySomethingService
public String saySomething(String message);
实现:SaySomethingServiceImpl
@Override
public String saySomething(String message) {
LOG.info("==================================================");
LOG.info("message : " + message);
LOG.info("==================================================");
return message;
}
服务有了,结合Spring进行配置
<!-- 服务方应用名,用于计算依赖关系 -->
<dubbo:application name="say-something-app-server"/>
<!-- 将写好的服务 通过multicast广播到DUBBO的注册中心-->
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.sdyc.ndmp.wechat.bean.SaySomethingService" ref="saySomethingService"/>
<!-- 和本地bean一样实现服务 -->
<bean id="saySomethingService" class="com.sdyc.ndmp.wechat.bean.SaySomethingServiceImpl"/>
消费端:
<!-- 消费方应用名,用于计算依赖关系 -->
<dubbo:application name="say-something-app-consumer"/>
<!--使用multicast广播注册中心暴露发现服务地址-->
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<!-- 和本地bean一样实现服务 -->
<dubbo:reference id="saySomethingService" interface="com.sdyc.ndmp.wechat.bean.SaySomethingService"/>
完毕。