基于stomp.py的持久客户端填满ActiveMQ的订阅者列表
我在使用ActiveMQ时遇到了一个问题,具体是关于持久客户端的。我在Python中使用stomp.py。
conn.start()
conn.connect(wait=True, header = {'client-id': 'myhostname' })
conn.subscribe(
'/topic/testTopic', ack='auto',
headers = {
'activemq.subscriptionName': 'myhostname',
'selector': "clientid <> '%s'" % 'myhostname'
}
)
从我的代码中可以看到,我把我的clientId设置成了我的主机名。正如下面的截图所示,clientId看起来像“ID:Atlas....”。
问题是,每次我断开我的stomp.py客户端后,下次再连接时,我都会得到一个新的“clientId”。这导致ActiveMQ中的订阅者列表越来越多:

上面的图片显示了我在ActiveMQ代理上的一个订阅者。下次我断开再连接时,上面的条目仍然会保留,并且会新增一个。这样一来,我的订阅者列表很快就会变得很长。
奇怪的是,选择器的功能是完全正常的(我通过把<>改成=来验证,这样消息就会返回给我),所以clientId肯定是在某种程度上有效的。
1 个回答
3
我解决了这个问题,整个事情都是因为一个简单的拼写错误。那一行:
conn.connect(wait=True, header = {'client-id': 'myhostname' })
应该用复数形式的'headers'。