ActiveMQ持久消费者通过STOMP用于客户端和subscriptionName

时间:2012-10-30 11:00:13

标签: apache activemq stomp

我有一个iOS客户端,通过STOMP协议连接到几个ActiveMQ主题和队列。当我连接到服务器时,我发送以下消息:

2012-10-30 10:19:29,757 [MQ NIO Worker 2] TRACE StompIO 
CONNECT
passcode:*****
login:system

2012-10-30 10:19:29,758 [MQ NIO Worker 2] DEBUG ProtocolConverter
2012-10-30 10:19:29,775 [MQ NIO Worker 2] TRACE StompIO
CONNECTED
heart-beat:0,0
session:ID:mbp.local-0123456789
server:ActiveMQ/5.6.0
version:1.0

然后,我使用以下消息订阅了几个主题:

2012-10-30 10:19:31,028 [MQ NIO Worker 2] TRACE StompIO 
SUBSCRIBE
activemq.subscriptionName:user@mail.com-/topic/SPOT.SPOTCODE
activemq.prefetchSize:1
activemq.dispatchAsync:true
destination:/topic/SPOT.SPOTCODE
client-id:1234
activemq.retroactive:true

我在使用ActiveMQ服务器时遇到两个问题。每次我连接时,Web界面中的Number of Consumers列都会增加,所以我只有一个真正的消费者,但计数大约是50个消费者。但最棘手的问题是,当我将另一台iOS设备插入笔记本电脑以测试消息环境时,连接到ActiveMQ时出现以下错误:

WARN | Async error occurred: javax.jms.JMSException: Durable consumer is in use for client: ID:mbp.local-0123456789 and subscriptionName: user@mail.com-/topic/SPOT.SPOTCODE

这似乎是通过STOMP与ActiveMQ断开连接不起作用,因为当其他设备未运行应用程序时会进行此日志记录尝试。为了解决这个问题,我尝试了以下方法:

  • 尝试订阅主题时始终注销。
  • 订阅

我目前正在使用v5.6.0在我的笔记本电脑上执行服务器。

1 个答案:

答案 0 :(得分:3)

如果您阅读ActiveMQ网站上的STOMP页面,您会注意到client-id和activemq-subscriptionName必须匹配才能使用STOMP持久订阅者。对于每个客户,这些值应该是不同的,否则由于名称冲突,您将看到相同的错误。