【发布时间】:2017-03-30 10:57:53
【问题描述】:
我有一个分布式系统应用程序,它使用 JBoss 作为应用程序服务器。我有一个用作模拟引擎的客户端应用程序。当客户端启动时,它会向服务器发送注册消息(JMS 消息),然后在数据库中设置一些字段。当服务器启动时,它会向所有客户端发送一条消息(主题)以检查它们是否处于活动状态。如果客户端还活着,他们可以读取消息并向服务器(队列)发送它还活着的响应。
如果用户正常关闭客户端,客户端会向服务器发送一条消息,我将取消注册。然后服务器注销它。这是在数据库端完成的。
如果用户异常关闭客户端(kill),则客户端无法向服务器发送消息进行注销。然后服务器不知道这个客户端不再活着。这会导致我的应用程序不一致。所以我需要一种方法来理解客户订阅的主题不再被订阅。
服务器向主题发送消息以检查客户端是否处于活动状态。
@Schedule(hour = "*", minute = "*", second = "30", persistent = false)
public void sendNodeStatusRequest() {
Message msg = MessageFactory.createStatusRequestMessage();
publishNodeMessage(msg);
}
一段时间后,服务器显示以下日志。我可以从 Java 中捕捉到这个警告吗?
07:17:00,698 WARN [org.hornetq.core.protocol.core.impl.RemotingConnectionImpl] Connection failure
has been detected: Did not receive ping from /127.0.0.1:61888. It is likely
the client has exited or crashed without closing its connection, or the
network between the server and client has failed. The connection will now be closed. [code=3]
07:17:00,698 WARN [org.hornetq.core.server.impl.ServerSessionImpl] Client
connection failed, clearing up resources for session 4e4e9dc6-153e-11e7-
80fa-742b62812c29
【问题讨论】:
-
网络不可靠。无论您的客户是否异常死亡,您的设计都需要考虑到这一点。
标签: java jakarta-ee jboss jms