【Dubbo】与ZK交互
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Dubbo】与ZK交互相关的知识,希望对你有一定的参考价值。
参考技术A Dubbo内部使用zkclient操作zookeeperDubbo与zk交互主要是通过Registry这个接口的实现类ZookeeperRegistry来完成的,ZookeeperRegistry封装了和注册中心交互的细节,底层使用ZookeeperClient接口通过zkclient或者Curator操纵zk
获取RegistryFactory 扩展点,扩展点名称为zookeeper,用于创建Registry
使用 AbstractRegistryFactory#getRegistry 获取Registry,调用子类 ZookeeperRegistryFactory.createRegistry 创建Registry
Registry的继承关系如下
把文件C:\Users\bobo.dubbo\dubbo-registry-192.168.48.117.cache中的内容加载为properties,内容每个接口对应注册中心的地址的缓存
最终得到的Registry实例为ZookeeperRegistry类型
zookeeperTransporter.connect(url); 初始化ZK
使用中间转换层解耦底层不同客户端的事件机制,将底层不同的事件转换后向上层传递
RegistryProtocol.export
-->>registryFactory.getRegistry
-->>ZookeeperRegistryFactory.createRegistry
-->>ZookeeperRegistry
-->>zookeeperTransporter.connect
-->>ZookeeperClient
-->>ZkclientZookeeperClient
创建并获取到连接了zk的registry之后就向zk注册provider的节点,执行流程如下:
/dubbo/com.alibaba.dubbo.demo.DemoService/configurators 包含服务的配置信息,在注册完成provider之后需要订阅该节点,当这个节点数据变更的时候zk会通知订阅了监听器
创建持久化节点 /dubbo/com.alibaba.dubbo.demo.DemoService/configurators ,然后创建上层统一的监听器ChildListener通过抽象类 AbstractZookeeperClient 完成事件的监听,并在方法回调的时候触发 ZookeeperRegistry.this.notify
将上层统一的监听器转换成为zk(IZkChildListener )或者curatro需要的监听器,并注册到各自的实现中
dubbo zk 分布式服务项目搭建与配置
1. 项目 jar -----提供接口
2. 项目 jar -----接口实现 provider
启动zk
main方法启动 start applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="test_provider" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://localhost:2181" />
<dubbo:monitor protocol="registry"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.beta_ai.med.service.TestService" ref="testService" />
<!-- 具体的实现bean -->
<bean id="testService" class="com.beta_ai.med.service.impl.TestServiceImpl" />
</beans>
3. 项目 war
调用服务
<?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://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="test_consumer" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://localhost:2181" />
<dubbo:monitor protocol="registry"/>
<!-- 声明需要暴露的服务接口 -->
<dubbo:reference interface="com.beta_ai.med.service.TestService" id="testService" check="false" />
</beans>
以上是关于【Dubbo】与ZK交互的主要内容,如果未能解决你的问题,请参考以下文章
Kafka:ZK+Kafka+Spark Streaming集群环境搭建VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网。