一、dubbo介绍

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。简单地说,dubbo是一个基于Spring的RPC(远程过程调用)框架,能够实现服务的远程调用、服务的治理

最主要就是服务之间的治理(治理基本上要做成运行时治理)

如果要用dubbo必须要用spring,非常大的前提

二、dubbo架构

调用关系说明:

1. 服务容器负责启动,加载,运行服务提供者。

2. 服务提供者在启动时,向注册中心注册自己提供的服务。

3. 服务消费者在启动时,向注册中心订阅自己所需的服务。

4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败, 再选另一台调用。

6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

总结:

生产者启动时把接口注册到注册中心,消费者启动时从注册中心获取生产者的接口列表放到本地,当有请求过来时,从消费者的本地获取生产者的接口列表选择一个生产者使用底层的调用协议(http、rmi、netty(dubbo))去调用,dubbo同时还能对服务进行监控

三、dubbo的官网入门使用demo

1. 服务提供者

1.1 定义服务接口DemoService.java

package com.alibaba.dubbo.demo;

public interface DemoService {
String sayHello(String name);
}

1.2 在服务提供方实现接口DemoServiceImpl.java

package com.alibaba.dubbo.demo.provider;

import com.alibaba.dubbo.demo.DemoService;

public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return "Hello " + name;
}
}

1.3 用Spring配置声明暴露服务provider.xml

<?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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="hello-world-app" /> <!-- 使用multicast广播注册中心暴露服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" /> <!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" /> <!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" /> <!-- 和本地bean一样实现服务 -->
<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />
</beans>

1.4 加载Spring配置Provider.java

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"http://10.20.160.198/wiki/display/dubbo/provider.xml"});
context.start();
System.in.read(); // 按任意键退出
}
}

2. 服务消费者

2.1 通过Spring配置引用远程服务consumer.xml

<?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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="consumer-of-helloworld-app" /> <!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />
</beans>

2.2 加载Spring配置,并调用远程服务Consumer.java

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[] {"http://10.20.160.198/wiki/display/dubbo/consumer.xml"});
context.start();
DemoService demoService = (DemoService)context.getBean("demoService"); // 获取远程服务代理
String hello = demoService.sayHello("world"); // 执行远程方法
System.out.println( hello ); // 显示调用结果
}
}

3. 总结

3.1 该接口需单独打包,在服务提供方和消费方共享
3.2 对服务消费方隐藏实现
3.3 也可以使用IoC注入

 参考文章:

dubbo官方文档:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

最新文章

  1. C#开发微信门户及应用(31)--微信语义理解接口的实现和处理
  2. JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
  3. 批量Clip
  4. yii2表关联实例
  5. ABBYY FineReader出现错误和警告提示的解决办法
  6. 简单了解ddos攻击
  7. [Android开发系列]IT博客应用V1.3
  8. Redis&#39; High Availability
  9. copy,retain,assign,strong,weak的区别
  10. Lintcode--006(交叉字符串)
  11. centOS下恢复win8引导
  12. 【ASP.NET Web API教程】2.3 与实体框架一起使用Web API
  13. 多线程图像处理中对选入DC的位图保护
  14. 第二周C++学习总结
  15. 定制化WinPE
  16. 为vue添加公用方法,vue添加通用方法
  17. zookeeper-03 命令行操作
  18. 远程连接MySQL MySQL的远程连接
  19. CentOS7安装mongodb
  20. HDU 4135 Co-prime 欧拉+容斥定理

热门文章

  1. mongoose查询
  2. python字符串与列表的相互转换
  3. JDBC连接
  4. 区间dp板子题:[noi1995]石子合并
  5. Flask路由
  6. Html链接标签:
  7. 在C#中,Json的序列化和反序列化的几种方式总结 转载
  8. 定位bug的方法总结
  9. Install latest git on CentOS 6/7
  10. Docker卸载高版本重装低版本后启动提示:driver not supported