我正在使用 ActiveMQ“Classic”,我想使用 AMQP 协议。
目前我正在尝试将 AMQP 1.0 和 Java 客户端 Qpid JMS 客户端 2.2.0 和 qpid-amqp-1-0-client-jms 0.32 与 Spring Boot 3 和
jakarta
包一起使用。
最终目标是充分使用 AMQP,并可能在不更改我的代码的情况下用另一个代理替换 ActiveMQ,但我使用 VirtualTopic,如果我理解 AMQP 可以通过使用带通配符的“路由密钥”来做与 VirtualTopic 相同的事情。
我已经配置了一个简单的 Java 发送者和消费者并且一切正常,但现在我想使用“路由密钥”发布关于主题
TEST.*
的消息,但我被困在这里,我不知道如何设置我的带通配符的路由密钥。
考虑反转您的应用程序设计,让消费者声明他们的兴趣,而不是发布者发送到目的地列表(或通配符匹配)。
pub-sub 的一个好的租户是将生产者和消费者从寻址中分离出来,这样可以减少耦合。这是 Virtual Topics 更强大的功能之一——它们超级实用。
使用虚拟主题没有什么不合规的地方。生产者简单地发布到一个主题,消费者从队列中读取。此功能在多个 JMS 规范代理中可用,并且不会将您锁定在 ActiveMQ 中。与 ActiveMQ 5 的不同之处在于管理开销超低。
向“主题”发布消息 - “TEST.EVENT”
任何感兴趣的消费者通过连接和创建队列(或者可以管理地创建队列)“Consumers.APP-1.TEST.EVENT”、“Consumers.APP-2.TEST.EVENT”等来注册自己。你也消费者能够注册选择器,因此他们只会收到过滤后的消息。
作为奖励,集群中的网络代理变得更加直接,因为它们在集群主题时会出现意外挂断。
这不是特定于协议或语言的。您可以使用不同的编程语言(Java、.NET、JavaScript、Pythong 等)或协议发送/接收——AMQP、JMS(openwire)、STOMP、MQTT 等,它“正常工作”