Java连接Zookeeper无法发布

做Demo时发现出现这个问题

Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /userService
	at org.apache.zookeeper.KeeperException.create(KeeperException.java:102)
	at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)
	at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:1733)
	at com.kkb.UserService.serverRegister(UserService.java:67)
	at com.kkb.UserService.start(UserService.java:33)
	at com.kkb.UserService.main(UserService.java:22)
然后开始排查问题,第一步我检查的是代码是否有问题,是否是端口号未写对等,排查完之后无误。第二步,检查Ping是否互通,是否能接收数据,确认后可以互通。第三步,检查防火墙是否关闭,检查之后,连360都关了,也重启了一下虚拟机,还是没有解决问题。第四步,检查时间间隔
ZooKeeper zooKeeper = new ZooKeeper("192.168.13.14:2181,192.168.13.15:2181,192.168.13.16:2181", 3000, null);

我怀疑是不是3000,时间是否太短然后开始往上加,直到改为300000
在这里插入图片描述
END

package com.kkb;


import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;

import java.io.IOException;
import java.io.InputStream;
import java.net.*;
import java.util.ArrayList;
import java.util.Enumeration;

public class UserService {
    private int port=3333;
    private String node="/userService";
    ServerSocket serverSocket;

    public static void main(String[] args) throws Exception {
        new UserService().start();
    }

    public void start() throws IOException, KeeperException, InterruptedException {

        //获取本机的ip地址   因为centos上可能有多个网卡信息,直接获取第一个可能是错误的(127.0.0.1)
        String ip = getLocalIP();
        //启动socket服务端
        serverSocket = new ServerSocket(port);
        System.out.println("服务器已启动.....");
        //注册服务到Zookeeper
        serverRegister(ip);
        //监听socket处理客户端请求
        clientHandler();


    }
    //处理客户端连接
    private void clientHandler() throws IOException {
        while (true){
            Socket clientSocket = serverSocket.accept();
            InputStream inputStream = clientSocket.getInputStream();
            byte[] barr = new byte[1024];
            while (true){
                int size = inputStream.read(barr);
                if (size == -1){
                    System.out.println("客户端下线了....");
                    break;
                }
                String data = new String(barr, 0, size);
                System.out.println("收到来自"+clientSocket.getInetAddress().getHostName()+"的:"+data);
            }
        }
    }
    private void serverRegister(String ip) throws IOException, KeeperException, InterruptedException {
        //注册服务信息到Zookeeper中(服务注册/发布服务)
        ZooKeeper zooKeeper = new ZooKeeper("192.168.13.14:2181,192.168.13.15:2181,192.168.13.16:2181", 300000, null);
        System.out.println("连接Zookeeper成功!");

        //在Zookeeper上创建节点 将自身的服务信息写入Zookeeper
        //访问控制列表
        ArrayList<ACL> acls = new ArrayList<>();
        //任何都可以访问的权限
        ACL acl = new ACL(31, ZooDefs.Ids.ANYONE_ID_UNSAFE);
        acls.add(acl);
        zooKeeper.create(node,(ip+":"+port).getBytes(),acls, CreateMode.EPHEMERAL);
        System.out.println("服务发布成功!");
    }

    private String getLocalIP() throws SocketException {
        String ip = null;
        Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
        while (networkInterfaces.hasMoreElements()) {
            NetworkInterface ni = (NetworkInterface) networkInterfaces.nextElement();
            Enumeration<InetAddress> nias = ni.getInetAddresses();
            while (nias.hasMoreElements()) {
                InetAddress ia = (InetAddress) nias.nextElement();
                if (!ia.isLinkLocalAddress() && !ia.isLoopbackAddress() && ia instanceof Inet4Address) {
                    ip = ia.getHostAddress();
                }
            }
        }
        return ip;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值