Docker安装配置zookeeper服务器

zookeeper官网案例

使用了 Zookeeper 来存储服务的相关信息

//下载
docker pull zookeeper:3.5.8
// 运行
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.5.8
// 进入zookeeper的bash
docker exec -it $ContainerID /bin/bash
// 连接服务
cd bin
./zkCli.sh -server 127.0.0.1:2181
// 测试服务端
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 1] 

使用 ZooKeeper Java客户端 Curator ,对 ZooKeeper 进行增删改查等操作

<!--这个jar包应该依赖log4j,不引入log4j会有控制台会有warn,但不影响正常使用-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>5.1.0</version>
</dependency>

定义zookeeper服务注册接口ServiceRegister。其两大基本功能

  • 注册:保存服务与地址
  • 查询:根据服务名查找地址

实现类

    // curator 提供的zookeeper客户端
    private CuratorFramework client;
    // zookeeper根路径节点
    private static final String ROOT_PATH = "MyRPC";

		// 初始化zk客户端并与zk服务端建立链接
		public ZkServiceRegister() {
        // 通过 CuratorFrameworkFactory 创建CuratorFramework 对象,
        // 然后再调用 CuratorFramework 对象的 start()方法即可!
    }

		@Override// 注册
    public void register(String serviceName, InetSocketAddress socketAddress) {
        // 把serviceName创建成永久节点CreateMode.PERSISTENT。
        // 服务提供者下线时,不删服务名,只删地址

        // 临时节点,服务器下线就删除节点
        .withMode(CreateMode.EPHEMERAL)
    }

    @Override// 查询服务地址
    public InetSocketAddress serviceDiscovery(String serviceName) {
      	client.getChildren()// 返回一个服务器的List
        return 一个InetSocketAddress
    }

客户端:改为从服务中心获取host和port

服务端:把自己的host和port给注册中心(serviceProvider)

源码 in version05

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐