老师,一直报找不到这个结点,但是结点确实是存在的呀
UsersService
package com.bjsxt.service;
import java.rmi.RemoteException;
public interface UsersService {
String findUsers(String str);
}
ClitentDemo
package com.bjsxt;
import com.bjsxt.service.UsersService;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import java.io.IOException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
public class ClientDemo implements Watcher {
public static void main(String[] args) throws IOException, KeeperException, InterruptedException, NotBoundException {
//链接Zookeeper
ZooKeeper zooKeeper = new ZooKeeper("192.168.88.101:2181,192.168.88.101:2182,192.168.88.101:2183", 150000, new ClientDemo());
//将Zookeeper当成注册中心从来里面取出来的
byte[] bytes = zooKeeper.getData("/bjsxt/service", new ClientDemo(), null);
//将字节数组转换成String类型
String url = new String(bytes);
System.out.println(url);
//找对象
UsersService usersService = (UsersService) Naming.lookup(url);
//通过拿到的对象调用方法
String result = usersService.findUsers("北京尚学堂");
System.out.println(result);
}
@Override
public void process(WatchedEvent watchedEvent) {
if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {
System.out.println("链接成功!!!");
}
}
}
试了很多次了,不是时间的问题


服务端
UsersService
package com.bjsxt.service;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface UsersService extends Remote {
String findUsers(String str) throws RemoteException;
}
UsersServiceImpl
package com.bjsxt.service.impl;
import com.bjsxt.service.UsersService;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class UsersServiceImpl extends UnicastRemoteObject implements UsersService {
//只保留一个无参数的构造方法即可 将protect改为public
public UsersServiceImpl() throws RemoteException {
}
@Override
public String findUsers(String str) throws RemoteException {
return "Hello Zookeeper " + str;
}
}
serviceDemo
package com.bjsxt;
import com.bjsxt.service.UsersService;
import com.bjsxt.service.impl.UsersServiceImpl;
import org.apache.zookeeper.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class serverDemo implements Watcher {
public static void main(String[] args) throws IOException, AlreadyBoundException, KeeperException, InterruptedException {
//实例化对外暴露的对象
UsersService usersService = new UsersServiceImpl();
//将对象绑定到本地的注册表中 创建一个本地的注册表监听8888端口
LocateRegistry.createRegistry(8888);
String url = "rmi://localhost:8888/user";
//url为绑定标识 完成绑定
Naming.bind(url, usersService);
//将url放到Zookeeper的结点中
ZooKeeper zooKeeper = new ZooKeeper("192.168.88.101:2181,192.168.88.101:2182,192.168.88.101:2183",15000,new serverDemo());
//创建结点 并且将url放到Znode中
zooKeeper.create("/bjsxt/service", url.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("服务发布成功!!!");
}
@Override
public void process(WatchedEvent watchedEvent) {
if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {
System.out.println("链接成功!!!");
}
}
}
服务端是没问题的 求老师帮忙看看
