我今天正在尝试使用TopicSubscriber对象(使用ActiveMQ作为我的消息代理和JMS提供程序)。我发现如果我在建立连接后启动了同步接收(2毫秒超时),如果我在建立与它的连接并启动第一次接收之间停止了ActiveMQ,则会抛出异常。但是如果我做了连接,那么成功接收,然后停止代理,然后做第二次接收,而不是在该接收上抛出异常,我一直只是得到一个空消息 - 没有迹象表明连接到即使在等了几个小时之后,经纪人也输了。然后,在重新启动ActiveMQ之后,除非我的程序关闭并重新打开它与它的连接,否则它的接收都不起作用。
我知道我可以围绕这个编码,但我想知道我是否错过了一些知道如何判断我的连接是否丢失的事情 - 请告诉我是否有办法,或者这只是一个“我需要编写的ActiveMQ JMS实现的功能。
答案 0 :(得分:1)
我已经使用ActiveMQ几年了,虽然有队列而不是主题,而且我从来没有见过这样的行为。我可能会看到,如果连接中断而没有代理能够正确断开消费者,消费者可能不会立即意识到问题。我不确定,但我认为ActiveMQ消费者在建立连接后不会与代理进行多少交谈。他们只是等待消息传递。尽管如此,我还是希望有某种心跳,在OpenWire Format page上,它确实意味着OpenWire有一个默认的30秒空闲时间。尝试进行一些网络监控,看看消费者是否曾尝试发送任何内容。如果确实如此,并且仍然没有意识到连接已经死亡,那么就会发生一些可疑的事情。否则,它可能只是找到一种保持活力的正确方法。 TCPTransport keepalive etting也可能很适合调查。