paascloud开源项目学习(3) -- 服务注册到 zookeeper 中心过程分析

本文详细介绍了Paascloud开源项目中,服务如何通过Zookeeper作为注册中心进行注册,包括Zookeeper的功能、代码流程和关键类的作用。在启动服务时,服务会以生产者或消费者的标识注册到Zookeeper,确保可靠消息服务的正常运行。
摘要由CSDN通过智能技术生成

1 前言

文档备份地址:https://blog.csdn.net/liu_zhaoming/article/details/79603036

2 可靠消息服务

在博客《paascloud开源项目学习(1) – 用户邮箱注册可靠消息服务流程》阐述的一个业务流程中,说明了本项目主要是基于 RocketMQ可靠消息服务 解决分布式事务。

2.1 zookeeper

仔细研读上面可靠消息设计文档,设计思想即原文:

因为项目采用的是 rocketmq,一个 topic 对应一个生产者,而可靠消息采用的是中间件负责发送消息,又不能采用中间件的生产者为所有上游系统发送消息,这里引入了 zookeeper注册中心,所以依赖可靠消息的服务,在启动项目的时候会像中间件去注册生产者,而中间件的 watch 机制会及时的更新生产者和消费者状态,而中间件会为使用中间件的系统提供 sdk,使用者无需关注实现,只需要引入中间件的 sdk 和对应的注解即可完成可靠消息的发送和消费

2.1.2 功能

  1. 使用在可靠消息服务中,充当可靠消息服务的注册中心
  2. 分布式ID协调者 角色。

根据博客 paascloud开源项目学习(2) – centos7 下安装 SpringCloud 环境 搭建好环境,运行项目后查看 zk 后,可以清楚看到上面两个功能的作用。

在这里插入图片描述

当某个服务启动时,该服务如何以生产者消费者的身份注册到 zookeeper 注册中心,以便后期执行业务时生产消息或消费消息?

2.2 代码流程

我们以服务 paascloud-provider-uac 启动为例,其他服务启动时都会执行下面流程!

2.2.1 ZookeeperInitRunner.java

初始化启动类

在用户权限服务 paascloud-provider-uac 启动过程中,实现 CommandLineRunner 的类 ZookeeperInitRunner 执行 run() ,注册…。

其他服务启动都会执行该类,根据各自服务的配置文件完成不同的初始化过程。

  1. 代码:
@Component
@Order
@Slf4j
public class ZookeeperInitRunner implements CommandLineRunner {
   
	@Resource
	private PaascloudProperties paascloudProperties;
	@Value("${spring.application.name}")
	private String applicationName;

	/**
	 * Run.
	 */
	@Override
	public void run(String... args) throws Exception {
   
		String hostAddress = InetAddress.getLocalHost().getHostAddress();
		log.info("###ZookeeperInitRunner,init. HostAddress={}, applicationName={}", hostAddress, applicationName);
		// 1. 重点代码,进入下面代码
		RegistryCenterFactory.startup(paascloudProperties, hostAddress, applicationName);
		log.info("###ZookeeperInitRunner,finish<<<<<<<<<<<<<");
	}

}
  1. 控制台

每个服务(生产者、消费者服务)的配置参数都是不同的!

[paascloud-provider-uac,,,,] 17044 --- [main] c.p.core.config.ZookeeperInitRunner: ###ZookeeperInitRunner,init. HostAddress=10.0.75.1, applicationName=paascloud-provider-uac

2.2.2 RegistryCenterFactory.java

注册中心工厂

  1. 代码:
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class RegistryCenterFactory {
   

	private static final ConcurrentHashMap<HashCode, CoordinatorRegistryCenter> REG_CENTER_REGISTRY = new ConcurrentHashMap<>();

	/**
	 * 创建注册中心.
	 *
	 * @param zookeeperProperties the zookeeper properties
	 *
	 * @return 注册中心对象 coordinator registry center
	 */
	 // 下面的 1 执行该类。
	public static CoordinatorRegistryCenter createCoordinatorRegistryCenter(ZookeeperProperties zookeeperProperties) {
   
		Hasher hasher = Hashing.md5().newHasher().putString(zookeeperProperties.getZkAddressList(), Charsets.UTF_8);
		HashCode hashCode = hasher.hash();
		CoordinatorRegistryCenter result = REG_CENTER_REGISTRY.get(hashCode);
		if (null != result) {
   
			return result;
		}
		result = new ZookeeperRegistryCenter(zookeeperProperties);
		result.init();
		REG_CENTER_REGISTRY
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值