1.以zookeeper进行接口管理,所以要有zookeeper
2.是实现远程程序调用的一种应用框架
Dubbo的架构如图所示:
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo提供了很多协议,Dubbo协议、RMI协议、Hessian协议
配置:
Provider:
<dubbo:application name="dubbo_provider"></dubbo:application> //提供方应用名称信息,这个相当于起一个名字,我们dubbo管理页面比较清晰是哪个应用暴露出来的 <dubbo:protocol name="dubbo" port="20880" /> //协议定义, //name协议名, //port监听端口号 // <dubbo:service interface="com.mor.server.dubbo.service.DemoServer" ref="demoService" /> <bean id="demoService" class="com.mor.server.dubbo.service.DemoServerImpl" /> //定义服务, //interface就是服务类的接口, //ref为ref引用对应的实现类的Bean的ID //registry向指定注册中心注册,在多个注册中心时使用,值为<dubbo:registry>的id属性,多个注册中心ID用逗号分隔,如果不想将该服务注册到任何registry,可将值设为N/A //register 默认true ,该协议的服务是否注册到注册中心。 <dubbo:registry protocol="zookeeper" address="192.9.145.19:2181,192.9.145.19:2182,192.9.145.19:2183" /> //注册中心定义, //protocol协议类型, //address注册中心IP和端口, //register是否向此注册中心注册服务,如果设为false,将只订阅,不注册。 //check注册中心不存在时,是否报错。 //subscribe是否向此注册中心订阅服务,如果设为false,将只注册,不订阅。 //timeout注册中心请求超时时间(毫秒)。 <dubbo:provider timeout="5000" /> //提供方配置, //timeout,调用超时时间 //registry,值为<dubbo:registry>的id属性,表示使用那个注册中心 //protocol,值为<dubbo:protocol>的id属性,表示使用那个协议
Consumer:
<dubbo:application name="dubbo_provider"></dubbo:application> //消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 <dubbo:registry protocol="zookeeper" address="192.9.145.19:2181,192.9.145.19:2182,192.9.145.19:2183" /> //注册中心定义,protocol协议类型,address注册中心IP和端口 <dubbo:reference id="demoService" interface="com.mor.server.dubbo.service.DemoServer" /> //消费方要引用的类,id为名字,interface就是服务类的接口 <dubbo:consumer timeout="5000" /> //消费方配置, //timeout,调用超时时间
参考原文(Dubbo与Zookeeper、SpringMVC整合和使用): https://my.oschina.net/farces/blog/639428
参考原文(配置文件详解): http://www.cnblogs.com/linjiqin/p/5859153.html
参考原文(例子): http://blog.csdn.net/morning99/article/details/40426781
参考原文(应用说明): http://dubbo.io/
参考原文(Dubbo令牌验证): http://blog.csdn.net/u010317829/article/details/52152709
参考原文(springboot与dubbo整合): http://www.th7.cn/Program/java/201609/959357.shtml