仅针对消息容器的 ActiveMQ Redelivery Police
ActiveMQ Redelivery Police only for a Message Container
在这段代码中,我试图仅针对特定主题中的消息设置重新投递警察:
RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
emailByFolioRedeliveryPolicy.setInitialRedeliveryDelay(5000);
emailByFolioRedeliveryPolicy.setRedeliveryDelay(5000);
emailByFolioRedeliveryPolicy.setUseExponentialBackOff(false);
emailByFolioRedeliveryPolicy.setBackOffMultiplier(10);
emailByFolioRedeliveryPolicy.setMaximumRedeliveries(3);
PooledConnectionFactory connPool = new PooledConnectionFactory();
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
RedeliveryPolicyMap redeliveryPolicyMap = connectionFactory.getRedeliveryPolicyMap();
redeliveryPolicyMap.put(new ActiveMQTopic("VirtualTopic.firstTopic"), redeliveryPolicy );
connPool.setConnectionFactory(connectionFactory);
connPool.setCreateConnectionOnStartup(true);
connPool.setMaxConnections(20);
return connPool;
问题是发送到另一个主题 (VirtualTopic.secondTopic) 的消息也会受到此策略的影响,因为我可以看到第二个主题上的侦听器正在处理重新传送的消息。在 RedeliveryPolicyMap 中,我添加了指定目标的策略。但出于某种原因,我无法让它按预期工作。
预期是:
- 新消息A发布到"VirtualTopic.firstTopic"
- 一条新消息 B 发布到 "VirtualTopic.secondTopic"
- "VirtualTopic.firstTopic" 上的侦听器 "Consume.FIRST.VirtualTopic.firstTopic" 将处理消息 A.
- "VirtualTopic.secondTopic" 上的侦听器 "Consume.SECOND.VirtualTopic.firstTopic" 将处理消息 B.
- 如果第一个侦听器失败,将在 15 分钟后重试。
- 如果第二个侦听器失败,则什么也不会发生。该消息将在死信队列中结束。
我从这个页面获取了配置:
http://activemq.apache.org/redelivery-policy.html
有没有人完成过这样的事情?谢谢
策略是在 ActiveMQConnectionFactory 或 ActiveMQConnection 级别设置的 - 如果您的策略不同,则需要相应地在项目中使用不同的连接工厂。在你提到的情况下,你需要定义 2 个单独的 ActiveMQ 连接工厂,它们有自己的重新传递策略。希望对你有帮助
在这段代码中,我试图仅针对特定主题中的消息设置重新投递警察:
RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
emailByFolioRedeliveryPolicy.setInitialRedeliveryDelay(5000);
emailByFolioRedeliveryPolicy.setRedeliveryDelay(5000);
emailByFolioRedeliveryPolicy.setUseExponentialBackOff(false);
emailByFolioRedeliveryPolicy.setBackOffMultiplier(10);
emailByFolioRedeliveryPolicy.setMaximumRedeliveries(3);
PooledConnectionFactory connPool = new PooledConnectionFactory();
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
RedeliveryPolicyMap redeliveryPolicyMap = connectionFactory.getRedeliveryPolicyMap();
redeliveryPolicyMap.put(new ActiveMQTopic("VirtualTopic.firstTopic"), redeliveryPolicy );
connPool.setConnectionFactory(connectionFactory);
connPool.setCreateConnectionOnStartup(true);
connPool.setMaxConnections(20);
return connPool;
问题是发送到另一个主题 (VirtualTopic.secondTopic) 的消息也会受到此策略的影响,因为我可以看到第二个主题上的侦听器正在处理重新传送的消息。在 RedeliveryPolicyMap 中,我添加了指定目标的策略。但出于某种原因,我无法让它按预期工作。
预期是:
- 新消息A发布到"VirtualTopic.firstTopic"
- 一条新消息 B 发布到 "VirtualTopic.secondTopic"
- "VirtualTopic.firstTopic" 上的侦听器 "Consume.FIRST.VirtualTopic.firstTopic" 将处理消息 A.
- "VirtualTopic.secondTopic" 上的侦听器 "Consume.SECOND.VirtualTopic.firstTopic" 将处理消息 B.
- 如果第一个侦听器失败,将在 15 分钟后重试。
- 如果第二个侦听器失败,则什么也不会发生。该消息将在死信队列中结束。
我从这个页面获取了配置:
http://activemq.apache.org/redelivery-policy.html
有没有人完成过这样的事情?谢谢
策略是在 ActiveMQConnectionFactory 或 ActiveMQConnection 级别设置的 - 如果您的策略不同,则需要相应地在项目中使用不同的连接工厂。在你提到的情况下,你需要定义 2 个单独的 ActiveMQ 连接工厂,它们有自己的重新传递策略。希望对你有帮助