如何解决在通配符地址上确认消息不会在限定地址上确认相同消息
- Spring JMSListener侦听
/queue/app/*
- 该消息实际上是在
/queue/app/XXX
生成的,因此也可以在通配符地址(/queue/app/*
)上使用以消耗 - 一旦在侦听器上成功完成处理,便会在通配符地址(
/queue/app/*
)上确认消息,而不是原始地址(/queue/app/XXX
)。
我担心的是,该消息将保留存储空间,直到到期为止。
我们如何解决这个问题?
用例
我的设置如下-
服务A
订阅/queue/A/*
发布到/queue/B/tenantId
服务B,其TenantID = 1
订阅/queue/B/1
发布到/queue/A/1
具有TenantID = 2的服务B
订阅/queue/B/2
发布到/queue/A/2
基本上,服务A 通过针对不同租户的独立队列(/queue/B/tenantId
)向服务B 发送消息。为每个租户分配单独队列的想法是消除队列中的租户间竞争。另外,每个租户将运行多个服务B 实例。现在,在完成服务B 的消息处理后,它将把响应消息发布回特定于租户的队列中的服务A (/queue/A/tenantId
)。这里的想法是在租户响应消息之间进行逻辑隔离。最后,在服务A 中使用通配符地址的原因是,因为我们无法为服务A 中的每个租户指定专门的使用者,因此我们计划在每个租户之间共享通配符地址。
broker-00.xml
<address-settings>
<address-setting match="/queue/#">
<default-address-routing-type>ANYCAST</default-address-routing-type>
<default-queue-routing-type>ANYCAST</default-queue-routing-type>
</address-setting>
<address-setting match="/topic/#">
<default-address-routing-type>MULTICAST</default-address-routing-type>
<default-queue-routing-type>MULTICAST</default-queue-routing-type>
</address-setting>
<address-setting match="#">
<auto-delete-queues>false</auto-delete-queues>
<auto-delete-jms-queues>false</auto-delete-jms-queues>
<auto-delete-jms-topics>false</auto-delete-jms-topics>
<auto-delete-addresses>false</auto-delete-addresses>
<max-delivery-attempts>15</max-delivery-attempts>
<expiry-delay>86400000</expiry-delay>
<redelivery-delay>3000</redelivery-delay>
<redelivery-delay-multiplier>1</redelivery-delay-multiplier>
<redelivery-collision-avoidance-factor>0.15</redelivery-collision-avoidance-factor>
<max-redelivery-delay>50000</max-redelivery-delay>
<default-consumer-window-size>0</default-consumer-window-size>
</address-setting>
</address-settings>
<wildcard-addresses>
<routing-enabled>true</routing-enabled>
<delimiter>/</delimiter>
<any-words>#</any-words>
<single-word>*</single-word>
</wildcard-addresses>
解决方法
您正在看到预期的行为。请记住,这是通配符地址,而不是通配符 consumer 。发送到与通配符地址匹配的任何地址的邮件将被路由到绑定到通配符地址的队列,并且独立于路由到原始地址发送到特定地址的队列的邮件,对这些消息进行确认。
如果您不希望邮件在任何队列中堆积,则只需删除队列并获取地址即可。没有任何队列的地址是一个完全有效的配置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。