从 ActiveMQ "Classic" 5.15.9 迁移到 ActiveMQ Artemis 2.17.0
Migration from ActiveMQ "Classic" 5.15.9 to ActiveMQ Artemis 2.17.0
给定简单配置:
- 服务器 - ActiveMQ
- Client1 - 制作人。使用 OPENWIRE 协议发送消息
- Client2 - 消费者。使用 STOMP 协议接收消息
只要我们使用 ActiveMQ 5.15.9,它就可以正常工作。但它不适用于 Artemis。
在 Artemis GUI 中,我可以看到,OPENWIRE 协议使用名称为 VirtualTopic.Some.Topic.Name
的多播队列,使用 STOMP 协议的消费者使用名称为 /topic/VirtualTopic.Some.Topic.Name
的多播队列。
当 Client1(生产者)发送消息时,我可以看到这个 DEBUG
日志条目:
2022-02-17 09:57:36,642 DEBUG [org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl] Couldn't find any bindings for address=VirtualTopic.Some.Topic.Name on message=CoreMessage[messageID=12884902991,durable=true,userID=a71cfe57-8fcf-11ec-8d24-e470b8b47a8a,priority=4, timestamp=Thu Feb 17 09:57:36 CET 2022,expiration=0, durable=true, address=VirtualTopic.Some.Topic.Name,size=1259,properties=TypedProperties[__AMQ_CID=ID:D118010-54523-637806885913733333-0:0,_AMQ_GROUP_SEQUENCE=0,__HDR_BROKER_IN_TIME=1645088256634,_AMQ_ROUTING_TYPE=0,__HDR_ARRIVAL=0,__HDR_COMMAND_ID=9,__HDR_PRODUCER_ID=[0000 003B 7B01 0027 4944 3A44 3131 3830 3130 2D35 3435 3233 2D36 3337 3830 ... 35 3931 3337 3333 3333 332D 313A 3000 0000 0000 0000 0100 0000 0000 0000 01),__HDR_MESSAGE_ID=[0000 004E 6E00 017B 0100 2749 443A 4431 3138 3031 302D 3534 3532 332D 3633 ... 0000 0000 0001 0000 0000 0000 0001 0000 0000 0000 0001 0000 0000 0000 0000),__HDR_DROPPABLE=false]]@7144975
2022-02-17 09:57:36,643 DEBUG [org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl] Message CoreMessage[messageID=12884902991,durable=true,userID=a71cfe57-8fcf-11ec-8d24-e470b8b47a8a,priority=4, timestamp=Thu Feb 17 09:57:36 CET 2022,expiration=0, durable=true, address=VirtualTopic.Some.Topic.Name,size=1259,properties=TypedProperties[__AMQ_CID=ID:D118010-54523-637806885913733333-0:0,_AMQ_GROUP_SEQUENCE=0,__HDR_BROKER_IN_TIME=1645088256634,_AMQ_ROUTING_TYPE=0,__HDR_ARRIVAL=0,__HDR_COMMAND_ID=9,__HDR_PRODUCER_ID=[0000 003B 7B01 0027 4944 3A44 3131 3830 3130 2D35 3435 3233 2D36 3337 3830 ... 35 3931 3337 3333 3333 332D 313A 3000 0000 0000 0000 0100 0000 0000 0000 01),__HDR_MESSAGE_ID=[0000 004E 6E00 017B 0100 2749 443A 4431 3138 3031 302D 3534 3532 332D 3633 ... 0000 0000 0001 0000 0000 0000 0001 0000 0000 0000 0001 0000 0000 0000 0000),__HDR_DROPPABLE=false]]@7144975 is not going anywhere as it didn't have a binding on address:VirtualTopic.Some.Topic.Name
我们的用例是我们有一个后端服务器通过 ActiveMQ 和 X 消费者发送事件。使用虚拟主题的决定是由另一个团队做出的。我真的不知道,他们消费事件的方式。在我这边,我有一个模拟器,它消耗事件并伪造那个子系统。
当客户端使用不同的协议时,是否可以让 Artemis 工作?
我看到您正在为您的 STOMP 消费者使用 /topic/
前缀。我建议您在 STOMP 客户端使用的 acceptor
上配置适当的 anycastPrefix
和 multicastPrefix
设置。这些设置控制代理在 auto-creating 地址和队列以及路由消息时使用的语义。例如:
<acceptor name="stomp">tcp://0.0.0.0:61613?protocols=STOMP;useEpoll=true;anycastPrefix=/queue/;multicastPrefix=/topic/</acceptor>
有关详细信息,请参阅 the documentation。
当消息被发送到多播地址时,您看到的 DEBUG
消息是预期的,并且没有队列绑定到该地址,就像 JMS 客户端向 JMS 发送消息时的情况一样主题,并且没有 JMS 订阅者。我认为您可以安全地忽略这些消息。
最后,我建议您迁移到 ActiveMQ Artemis 2.20.0。在 2.17.0 和 2.20.0 之间已经解决了 300 多个 Jiras。
给定简单配置:
- 服务器 - ActiveMQ
- Client1 - 制作人。使用 OPENWIRE 协议发送消息
- Client2 - 消费者。使用 STOMP 协议接收消息
只要我们使用 ActiveMQ 5.15.9,它就可以正常工作。但它不适用于 Artemis。
在 Artemis GUI 中,我可以看到,OPENWIRE 协议使用名称为 VirtualTopic.Some.Topic.Name
的多播队列,使用 STOMP 协议的消费者使用名称为 /topic/VirtualTopic.Some.Topic.Name
的多播队列。
当 Client1(生产者)发送消息时,我可以看到这个 DEBUG
日志条目:
2022-02-17 09:57:36,642 DEBUG [org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl] Couldn't find any bindings for address=VirtualTopic.Some.Topic.Name on message=CoreMessage[messageID=12884902991,durable=true,userID=a71cfe57-8fcf-11ec-8d24-e470b8b47a8a,priority=4, timestamp=Thu Feb 17 09:57:36 CET 2022,expiration=0, durable=true, address=VirtualTopic.Some.Topic.Name,size=1259,properties=TypedProperties[__AMQ_CID=ID:D118010-54523-637806885913733333-0:0,_AMQ_GROUP_SEQUENCE=0,__HDR_BROKER_IN_TIME=1645088256634,_AMQ_ROUTING_TYPE=0,__HDR_ARRIVAL=0,__HDR_COMMAND_ID=9,__HDR_PRODUCER_ID=[0000 003B 7B01 0027 4944 3A44 3131 3830 3130 2D35 3435 3233 2D36 3337 3830 ... 35 3931 3337 3333 3333 332D 313A 3000 0000 0000 0000 0100 0000 0000 0000 01),__HDR_MESSAGE_ID=[0000 004E 6E00 017B 0100 2749 443A 4431 3138 3031 302D 3534 3532 332D 3633 ... 0000 0000 0001 0000 0000 0000 0001 0000 0000 0000 0001 0000 0000 0000 0000),__HDR_DROPPABLE=false]]@7144975
2022-02-17 09:57:36,643 DEBUG [org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl] Message CoreMessage[messageID=12884902991,durable=true,userID=a71cfe57-8fcf-11ec-8d24-e470b8b47a8a,priority=4, timestamp=Thu Feb 17 09:57:36 CET 2022,expiration=0, durable=true, address=VirtualTopic.Some.Topic.Name,size=1259,properties=TypedProperties[__AMQ_CID=ID:D118010-54523-637806885913733333-0:0,_AMQ_GROUP_SEQUENCE=0,__HDR_BROKER_IN_TIME=1645088256634,_AMQ_ROUTING_TYPE=0,__HDR_ARRIVAL=0,__HDR_COMMAND_ID=9,__HDR_PRODUCER_ID=[0000 003B 7B01 0027 4944 3A44 3131 3830 3130 2D35 3435 3233 2D36 3337 3830 ... 35 3931 3337 3333 3333 332D 313A 3000 0000 0000 0000 0100 0000 0000 0000 01),__HDR_MESSAGE_ID=[0000 004E 6E00 017B 0100 2749 443A 4431 3138 3031 302D 3534 3532 332D 3633 ... 0000 0000 0001 0000 0000 0000 0001 0000 0000 0000 0001 0000 0000 0000 0000),__HDR_DROPPABLE=false]]@7144975 is not going anywhere as it didn't have a binding on address:VirtualTopic.Some.Topic.Name
我们的用例是我们有一个后端服务器通过 ActiveMQ 和 X 消费者发送事件。使用虚拟主题的决定是由另一个团队做出的。我真的不知道,他们消费事件的方式。在我这边,我有一个模拟器,它消耗事件并伪造那个子系统。
当客户端使用不同的协议时,是否可以让 Artemis 工作?
我看到您正在为您的 STOMP 消费者使用 /topic/
前缀。我建议您在 STOMP 客户端使用的 acceptor
上配置适当的 anycastPrefix
和 multicastPrefix
设置。这些设置控制代理在 auto-creating 地址和队列以及路由消息时使用的语义。例如:
<acceptor name="stomp">tcp://0.0.0.0:61613?protocols=STOMP;useEpoll=true;anycastPrefix=/queue/;multicastPrefix=/topic/</acceptor>
有关详细信息,请参阅 the documentation。
当消息被发送到多播地址时,您看到的 DEBUG
消息是预期的,并且没有队列绑定到该地址,就像 JMS 客户端向 JMS 发送消息时的情况一样主题,并且没有 JMS 订阅者。我认为您可以安全地忽略这些消息。
最后,我建议您迁移到 ActiveMQ Artemis 2.20.0。在 2.17.0 和 2.20.0 之间已经解决了 300 多个 Jiras。