11. Dubbo原理解析-注册中心之基于dubbo协议的接口介绍

服务注册与发现的中心,服务的提供者将服务发布到注册中心,服务的使用着到注册中引用服务。

Dubbo的注册中心提供了多种实现,其实现是基于dubbo的spi的扩展机制的,使用着可以直接实现自己的注册中心。

@SPI("dubbo")

public
interface
RegistryFactory {

/**

* 连接注册中心.

* 连接注册中心需处理契约

* 1. 当设置check=false时表示不检查连接,否则在连接不上时抛出异常。

* 2. 支持URL上的username:password权限认证。

* 3. 支持backup=10.20.153.10备选注册中心集群地址。

* 4. 支持file=registry.cache本地磁盘文件缓存。

* 5. 支持timeout=1000请求超时设置。

* 6. 支持session=60000会话超时或过期设置。

* @param url 注册中心地址,不允许为空

* @return 注册中心引用,总不返回空

*/

@Adaptive({"protocol"})

RegistrygetRegistry(URL url);

}

RegistryFactory用来创建注册中心, 默认的注册中心是dubbo协议,由于阿里的注册中心并没有开源,dubbo协议注册中心只提供了一个简单实现。 开源dubbo的注册中心推荐使用zookeeper。这里我们主要去分析基于dubbo和zookeeper协议的注册中心实现及使用。

注册中心服务类图:

服务接口定义

public
interface
RegistryService {

void register(URL url);

void unregister(URL url);

void subscribe(URL url, NotifyListener listener);

void unsubscribe(URL url, NotifyListener listener);

List<URL> lookup(URL url);

}

Register:注册数据,比如:提供者地址,消费者地址,路由规则,覆盖规则,等数据。

注册需处理契约

1. 当URL设置了check=false时,注册失败后不报错,在后台定时重试,否则抛出异常。

2. 当URL设置了dynamic=false参数,则需持久存储,否则,当注册者出现断电等情况异常退出时,需自动删除。

3. 当URL设置了category=routers时,表示分类存储,缺省类别为providers,可按分类部分通知数据。

4. 当注册中心重启,网络抖动,不能丢失数据,包括断线自动删除数据。

5. 允许URI相同但参数不同的URL并存,不能覆盖。

Unregister:取消注册

Subscribe:订阅符合条件的已注册数据,当有注册数据变更时自动推送

订阅需处理契

1. 当URL设置了check=false时,订阅失败后不报错,在后台定时重试。

2. 当URL设置了category=routers,只通知指定分类的数据,多个分类用逗号分隔,并允许星号通配,表示订阅所有分类数据。

3. 允许以interface,group,version,classifier作为条件查询,如:interface=com.alibaba.foo.BarService&version=1.0.0

4. 并且查询条件允许星号通配,订阅所有接口的所有分组的所有版本,或:interface=*&group=*&version=*&classifier=*

5. 当注册中心重启,网络抖动,需自动恢复订阅请求

6. 允许URI相同但参数不同的URL并存,不能覆盖

7. 必须阻塞订阅过程,等第一次通知完后再返回。

Unsubscribe:取消订阅

Lookup: 查询符合条件的已注册数据,与订阅的推模式相对应,这里为拉模式,只返回一次结果

时间: 2024-08-27 23:00:07

11. Dubbo原理解析-注册中心之基于dubbo协议的接口介绍的相关文章

12. Dubbo原理解析-注册中心之基于dubbo协议的简单注册中心实现

基于dubbo协议开源只是给出了默认一个注册中心实现SimpleRegistryService, 它只是一个简单实现,不支持集群,就是利用Map<String/*ip:port*/, Map<String/*service*/, URL>来存储服务地址, 具体不在啰嗦了,请读者翻看源代码,可作为自定义注册中的参考. 注册中心启动 SimpleRegistryService本身也是作为一个dubbo服务暴露. <dubbo:protocolport="9090"

13. Dubbo原理解析-注册中心之Zookeeper协议注册中心

下面我们来看下开源dubbo推荐的业界成熟的zookeeper做为注册中心, zookeeper是hadoop的一个子项目是分布式系统的可靠协调者,他提供了配置维护,名字服务,分布式同步等服务.对于zookeeper的原理本文档不分析,后面有时间在做专题. zookeeper注册中心 Zookeeper对数据存储类似linux的目录结构,下面给出官方文档对dubbo注册数据的存储示例 假设读者对zookeeper有所了解,能够搭建zookeeper服务,其实不了解也没关系,谷歌百度下分分钟搞起.

说一下Dubbo 的工作原理?注册中心挂了可以继续通信吗?

面试题 说一下的 dubbo 的工作原理?注册中心挂了可以继续通信吗?说说一次 rpc 请求的流程? 面试官心理分析 MQ.ES.Redis.Dubbo,上来先问你一些思考性的问题.原理,比如 kafka 高可用架构原理.es 分布式架构原理.redis 线程模型原理.Dubbo 工作原理:之后就是生产环境里可能会碰到的一些问题,因为每种技术引入之后生产环境都可能会碰到一些问题:再来点综合的,就是系统设计,比如让你设计一个 MQ.设计一个搜索引擎.设计一个缓存.设计一个 rpc 框架等等. 那既

2. Dubbo原理解析-Dubbo内核实现之基于SPI思想Dubbo内核实现(转)

转载自  斩秋的专栏  http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159 SPI接口定义 定义了@SPI注解 public @interface SPI { String value() default ""; //指定默认的扩展点 } 只有在接口打了@SPI注解的接口类才会去查找扩展点实现 会依次从这几个文件中读取扩展点 META-INF/dubbo/internal/   //dubbo内部实现的各种扩展

26. Dubbo原理解析-监控

Dubbo发布代码中,自带了一个简易的监控中心实现.对于一般的小业务这个监控中心应该能够满足需求,对于那些大业务量的大公司一般都会有自己的监控中心,更加丰富的功能如常用的报警短信通知等等.这章讲解分析使得读者能够了解一般的监控中心实现,也使得有自己接入监控中心需求的大概知道如何集成自己的监控中心实现.下面我们就以dubbo自带的监控中心开始讲解. 监控中心 1.  监控中心启动,我们先看下dubbo的属性文件 dubbo.container=log4j,spring,registry,jetty

9. Dubbo原理解析-代理之服务引用

服务引用是服务的消费方向注册中心订阅服务提供方提供的服务地址后向服务提供方引用服务的过程. 服务的应用方在spring的配置实例如下: <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo. DemoService"/> 如上配置spring在容器启动的时候会解析自定义的schema元素<dubbo: reference/>转换成dubbo内部数据结构Refer

16. Dubbo原理解析-集群&amp;容错之router路由服务

Router服务路由, 根据路由规则从多个Invoker中选出一个子集AbstractDirectory是所有目录服务实现的上层抽象, 它在list列举出所有invokers后,会在通过Router服务进行路由过滤. Router接口定义 public interface Router extendsComparable<Router> { URL getUrl(); <T> List<Invoker<T>> route(List<Invoker<

dubbo连接zookeeper注册中心因为断网导致线程无限等待问题

最近维护的系统切换了网络环境,由联通换成了电信网络,因为某些过滤规则导致系统连不上zookeeper服务器(应用系统机器在深圳,网络为电信线路,zookeeper服务器在北京,网络为联通线路),因为我不是运维人员也不懂运维相关的技术,所以排查了很久也不知道原因,最后无奈之下把深圳这边的网络切回了联通,系统恢复正常. 但是因为本次事故体现了一个很严重的问题,即当zookeeper注册中心连不上时dubbo的线程会无限等待,因为系统有一些定时任务会比较频繁地开启新线程连接dubbo,所以导致的结果是

8. Dubbo原理解析-代理之服务发布

服务发布是服务提供方向注册中注册服务过程,以便服务消费者从注册中心查阅并调用服务. 服务发布方在spring的配置文件中配置如下: <bean id="demoService"class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" /> 上面是在spring中配置的服务的具体实现,是spring中的一个普通的bean <dubbo:serviceinterface="com.alib