JMX RMI代理容错机制

时间:2011-05-30 00:59:47

标签: rmi jmx fault

我正在使用JMX-RMI代理进行消息传递。我有一个java程序,它将一个名称/ id的消息发送给一组监听器/监听器。根据监听器收到的消息,客户端程序的行为也相应。这部分工作正常,但我想知道什么样的容错内置于JMX RMI代理中。

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

非常感谢

1 个答案:

答案 0 :(得分:2)

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

您需要关注两层连接:

  1. MBeanServerConnection本身。换句话说,如果整个服务器端JVM终止,则客户端进程需要知道。
  2. 虽然服务器JVM和子MBeanServerConnection可能继续可用,但是“托管”,侦听器/客户端消息转发器服务本身可能会停止/失败/停止。
  3. 对于#1,客户端进程可以使用NotificationListener方法向JMXConnector注册addConnectionNotificationListener。然后,您的本地连接将在以下所有事件中发出JMXConnectionNotification

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

    这样,您的客户端就会知道何时建立并丢失了与服务器的连接。

    对于#2,它更适合您的应用程序,但也许您可以调整这样的简单模式:

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

    1. 客户端,因此他们知道服务已启动/停止。
    2. 服务器端“观察者”,可以侦听“停止”并重新启动服务。
    3. 这或多或少是你在想什么?