Java RMI 和队列问题

标签 java rmi

我正在编写一个 java 程序,我使用 rmi 进行网络通信。我导出一个远程对象,更多客户端可以连接。该对象包含一个返回另一个远程对象的方法,每个客户端都不同。返回的对象包含两个 LinkedBlockingQueue。当连接多个客户端时,它们似乎从同一个队列中获取消息。 这里是第一个界面

public interface RMIInterface extends Remote {
    public ConnectionInterface createConnection () throws RemoteException;
}

这是第一个对象

public class RMIImplementation extends UnicastRemoteObject implements RMIInterface {
    @Override
    public ConnectionInterface createConnection() throws RemoteException {
        ...
    }

}

这是第二个界面

public interface ConnectionInterface extends Remote {
    public void sendMessage (Message info) throws RemoteException;

    public Message getMessage() throws RemoteException;
}

这是第二个对象

public class RMIConnection implements ConnectionInterface{

    private LinkedBlockingQueue<Message> in;
    private LinkedBlockingQueue<Message> out;

    ServerRMIConnection() {
        in = new LinkedBlockingQueue<Message> ();
        out = new LinkedBlockingQueue<Message> ();

        try {
            UnicastRemoteObject.exportObject(this, 0);
        } catch (RemoteException e) {
        }
    }   

    @Override
    public void sendMessage (Message info){
        in.offer(info);
    }

    @Override
    public Message getMessage() {
        Message message=null;
        try {
            info = out.poll(120, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
        }

        return message;
    }
}

当两个或多个客户端调用getMessage 方法时,它们会收到相同的消息。有什么想法吗?

最佳答案

当您忽略调用 exportObject() 的异常时,它可能会失败。永远不要那样做。打印异常。

关于Java RMI 和队列问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30992460/

相关文章:

java - rmic 编译中未找到类错误

java - rmi类找不到异常

java - Android 通知打开当前正在运行的应用程序而不是创建新进程?

java - AspectJ 切入点模式,用于调用具有特定注释的类成员上的方法

java - 如何在Spring rmi设置中绑定(bind)IP地址?

java - 未找到 rmic 错误类

java - 为什么在从 applet 使用 RMI 时会出现 AccessControlException?

java - 保存上传时MongoDB异常

java - 将对象放入 ChannelBuffer

java - 随机 JVM 崩溃,堆栈仅显示 Hibernate 数据