gpt4 book ai didi

java RMI 和/或 JNDI : binding for objects that are not singletons

转载 作者:行者123 更新时间:2023-12-02 08:21:16 25 4
gpt4 key购买 nike

好的,我了解了如何使用 RMI 将单例服务器对象与众所周知的名称绑定(bind)在一起,以便其他 JVM 可以找到它。

假设我有多个进程,每个进程都运行一个 JVM,并且每个进程都创建一个支持 FooRemote 接口(interface)的对象,我希望通过 RMI 公开该接口(interface)。每个进程都有一个不可预测的生命周期,与某些事物相对应,无论是来自用户输入,还是资源的可用性。

如何绑定(bind)它们而不发生命名冲突?使用 JNDI 有帮助吗?

实际上,我想要做的是拥有一个类似对象的池,每个对象都位于单独的 JVM 上(这样做的原因很重要,但超出了这个问题的范围)。我需要一个客户端能够枚举哪些对象可用,并选择一个进行进一步交互。

(我强调单独的 JVM 的原因是,如果它们都在同一个 JVM 中,我可以有一个处理组池的单例管理器,并使所有组实例可以通过管理器访问。但我可以'如果组池由单独 JVM 中的独立实例组成,则不要这样做。)

最佳答案

这不是很有效,但是您可以在每个 JVM 中拥有一个单例管理器(工厂),它创建并枚举池中属于该 JVM 的所有对象。

你显然必须询问他们所有人才能了解全貌。这可能是也可能不是您想要的,具体取决于您的实际用例。虽然它是准确的,但网络流量和延迟会极大地影响性能,因此如果您查询池的次数多于更新池的次数,请不要尝试此操作。

另一种解决方案是将客户端转变为服务器,并允许服务器在池中对象的状态发生变化时调用回调。此解决方案可能在网络流量方面更有效,但不太最新:如果其中一台服务器突然终止,则其对象不会从池中删除,直到您实际尝试使用它们并失败为止。这种行为可以通过 keepalive 调用和超时来跟踪服务器的可用性来改进,但显然会增加流量和解决方案的复杂性。

关于java RMI 和/或 JNDI : binding for objects that are not singletons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5419633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com