Dubbo远程调用服务框架原理与示例

时间:2014-04-23 08:43:19   收藏:0   阅读:751
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。
主要核心部件:
  • Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.
  • RPC: (Remote Procedure Call Protocol远程过程调用协议),一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
  • Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

Dubbo工作原理

 

(1) 连通性:

(2) 健状性:

(3) 伸缩性:

 

例子

服务端
定义一个Service Interface:(HelloService.java
bubuko.com,布布扣
package com.alibaba.hello.api;
public interface HelloService{
  String sayHello(String name);
}
bubuko.com,布布扣

 

接口的实现类:(HelloServiceImpl.java
bubuko.com,布布扣
bubuko.com,布布扣
package com.alibaba.hello.impl;
import com.alibaba.hello.api.HelloService;
public class HelloServiceImpl implements HelloService{
  public String sayHello(String name){
    return "Hello " + name;
  }
}
bubuko.com,布布扣
bubuko.com,布布扣

 

Spring配置:(provider.xml
bubuko.com,布布扣
bubuko.com,布布扣
<?xml version="1.0" encoding="UTF-8"?>
<beans ......>
  <!-- Application name -->
  <dubbo:application name="hello-world-app" />
  <!-- registry address, used for service to register itself -->
  <dubbo:registry address="multicast://224.5.6.7:1234" />
  <!-- expose this service through dubbo protocol, through port 2 0 8 8 0 -->
  <dubbo:protocol name="dubbo" port="2 0 8 8 0" />
  <!-- which service interface do we expose? -->
  <dubbo:service interface="com.alibaba.hello.api.HelloService" ref="helloService" />
  <!-- designate implementation -->
  <bean id="helloService" class="com.alibaba.hello.impl.HelloServiceImpl" />
</beans>
bubuko.com,布布扣
bubuko.com,布布扣

 

测试代码:(Provider.java
bubuko.com,布布扣
bubuko.com,布布扣
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
public static void main(String[] args) {
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"}); //启动成功,监听端口为2 0 8 8 0
  System.in.read(); // 按任意键退出
  }
}
bubuko.com,布布扣
bubuko.com,布布扣

 

客户端

Spring配置文件:(consumer.xml)
bubuko.com,布布扣
bubuko.com,布布扣
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=......>
<!-- consumer application name -->
<dubbo:application name="consumer-of-helloworld-app" />
<!-- registry address, used for consumer to discover services -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- which service to consume? -->
<dubbo:reference id="helloService" interface="com.alibaba.hello.api.HelloService" />
</beans>
bubuko.com,布布扣
bubuko.com,布布扣

 

客户端测试代码:(Consumer.java
bubuko.com,布布扣
bubuko.com,布布扣
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.alibaba.hello.api.HelloService;
public class Consumer {
  public static void main(String[] args) {
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"});
    HelloService helloService = (HelloService)context.getBean("helloService"); // get service invocation proxy
    String hello = helloService.sayHello("world"); // do invoke!
    System.out.println( hello ); // cool, how are you~
  }
}
bubuko.com,布布扣

Dubbo远程调用服务框架原理与示例,布布扣,bubuko.com

原文:http://www.cnblogs.com/shaohz2014/p/3680568.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!