3

我正在使用 JMX-RMI 代理进行消息传递。我有一个 java 程序,它向一组侦听器/侦听器发送一条具有名称/id 的消息。基于侦听器收到的消息,客户端程序的行为相应。这件作品很好,但我想知道是什么样的JMX RMI 代理中内置了容错功能。

如果侦听器意外停止,JMX 是否会重新启动它或在某处记录错误,如果任一侧的消息队列已满怎么办。任何解释 JMX RMI 的底层架构或内置容错机制的文档都将受到赞赏。如果它没有任何容错机制,那将是一个好的方法。

非常感谢

4

1 回答 1

2

我假设您的客户端侦听器正在使用标准的javax.management.remote连接器。如果没有一些定制,我想说你可以实现一些简单的故障检测。对于容错,您可能正在寻找某种集群解决方案。

您需要关注两层连接:

  1. MBeanServerConnection 本身。换句话说,如果整个服务器端 JVM 终止,您的客户端进程需要知道。
  2. 虽然服务器 JVM 和附属 MBeanServerConnection 可能继续可用,但“托管”的侦听器/客户端消息转发器服务本身可能会停止/失败/停止。

对于 #1,客户端进程可以使用addConnectionNotificationListener方法向JMXConnector注册NotificationListener 。然后,您的本地连接将在以下所有事件上发出JMXConnectionNotification :

  • 新的客户端连接已打开。
  • 客户端连接已关闭。
  • 客户端连接意外失败。
  • 客户端连接可能会丢失通知。此通知仅出现在客户端。

这样,您的客户端将知道何时建立和丢失与服务器的连接。

对于#2,它对您的应用程序更具体一些,但也许您可以采用这样的简单模式:

当您的侦听器/转发器服务启动时,发出启动通知。当它停止时,发出停止通知。注册这些通知的两类监听器是:

  1. 客户,所以他们知道服务已经启动/停止。
  2. 可以监听“停止”并重新启动服务的服务器端“观察者”。

这或多或少是你在想的吗?

于 2011-05-31T13:26:47.573 回答