基于stomp.py的持久客户端填满ActiveMQ的订阅者列表

3 投票
1 回答
2753 浏览
提问于 2025-04-16 04:28

我在使用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中的订阅者列表越来越多:

alt text

上面的图片显示了我在ActiveMQ代理上的一个订阅者。下次我断开再连接时,上面的条目仍然会保留,并且会新增一个。这样一来,我的订阅者列表很快就会变得很长。

奇怪的是,选择器的功能是完全正常的(我通过把<>改成=来验证,这样消息就会返回给我),所以clientId肯定是在某种程度上有效的。

1 个回答

3

我解决了这个问题,整个事情都是因为一个简单的拼写错误。那一行:

conn.connect(wait=True, header = {'client-id': 'myhostname' })

应该用复数形式的'headers'。

撰写回答