【发布时间】:2020-06-09 13:58:29
【问题描述】:
下面是python程序中连接ActiveMQ的连接参数
broker_url = config_params.items('BROKERS')
conn = stomp.Connection12(broker_url,
reconnect_sleep_initial=20.0,
reconnect_sleep_increase=2.0,
reconnect_attempts_max=10,
heartbeats=(60000,60000)
)
因此,ReadCheckInterval 和 WriteCheckInterval 设置为 1 分钟用于连接。心跳似乎被错过了。我只是想弄清楚客户端或 ActiveMQ 服务器端是否缺少心跳。有人可以帮我吗?
以下是 Python 程序的日志:
2020-02-25 12:27:16,141 - INFO - Attempting connection to host
2020-02-25 12:27:16,142 - INFO - Established connection to host
2020-02-25 12:27:16,142 - INFO - Starting receiver loop
2020-02-25 12:27:16,143 - DEBUG - Sending frame: ['STOMP', '\n', 'accept-version:1.2\n', 'client-id, 'heart-beat:60000,60000\n',]
2020-02-25 12:27:16,143 - DEBUG - Received frame: 'CONNECTED', headers={'server': 'ActiveMQ/5.15.2', 'heart-beat': '60000,60000']body=''
2020-02-25 12:27:16,143 - DEBUG - Sending frame: ['SUBSCRIBE', '\n', 'ack:auto\n', 'activemq.subscriptionName:subscriber\n']
2020-02-25 12:30:16,144 - DEBUG - Received frame: 'heartbeat', headers={}, body=None
2020-02-25 12:30:16,145 - ERROR - disconnected from broker, will attempt to reconnect...
2020-02-25 12:30:16,145 - INFO - Receiver loop ended
2020-02-25 12:30:16,320 - INFO - Attempting connection to host
2020-02-25 12:30:16,321 - INFO - Established connection to host
2020-02-25 12:30:16,321 - INFO - Starting receiver loop
2020-02-25 12:30:16,321 - DEBUG - Sending frame: ['STOMP', '\n', 'accept-version:1.2\n', 'client-id:\n', 'heart-beat:60000,60000\n']
2020-02-25 12:30:16,322 - DEBUG - Received frame: 'CONNECTED', headers={'server': 'ActiveMQ/5.15.2', 'heart-beat': '60000,60000']body=''
2020-02-25 12:30:16,322 - DEBUG - Sending frame: ['SUBSCRIBE', '\n', 'ack:auto\n', 'activemq.subscriptionName:subscriber]
我看到客户端和服务器都缺少相互发送心跳的信息。以下是客户端错过发送心跳的日志。连接在 12:03:32 建立。客户端在 12:03:32 发送第一个心跳,然后订阅 ActiveMQ 目标。它不断收到消息,所以有活动,直到 12:12:08。然后一段时间不活动,直到 12:13:32(>60 秒),连接被终止。这是 ActiveMQ 服务器对来自客户端错过的心跳的容忍度太低的问题吗?在这种情况下,将客户端的心跳间隔增加到 120 秒会有帮助吗?
2020-02-26 12:03:32,498 - INFO - Established connection to host, port 61613
2020-02-26 12:03:32,499 - INFO - Sending frame: 'STOMP', headers={'heart-beat': '60000,60000'}
2020-02-26 12:03:32,512 - INFO - Received frame: 'CONNECTED', headers={'heart-beat': '60000,60000'}
2020-02-26 12:03:32,513 - INFO - Sending frame: 'SUBSCRIBE'
2020-02-26 12:04:27,924 - INFO - Received frame: 'MESSAGE'
.
.
2020-02-26 12:12:08,475 - INFO - Received frame: 'MESSAGE'
2020-02-26 12:13:32,519 - INFO - Received frame: 'heartbeat'
2020-02-26 12:13:32,548 - ERROR - disconnected from broker
我还看到服务器缺少发送心跳和客户端收到心跳超时错误的问题。我正在考虑通过将心跳配置设置为(120000,0)来禁用服务器的心跳。有什么建议吗?
【问题讨论】:
-
ReadCheckInterval和WriteCheckInterval是什么意思?你说的是心跳配置吗? -
您的客户端似乎没有发送任何心跳以保持连接处于活动状态。您是否有任何来自服务器的调试日志来表明它是否正在接收心跳?