2015-07-31 2 views
0

В этом фрагменте кода я пытаюсь создать Redelivery полицию только лишь для сообщений в определенной теме:полиция ActiveMQ Redelivery только для сообщения Контейнер

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 я добавляю политику, определяющую Destination. Но по какой-то причине я не могу заставить его работать, как ожидалось.

Ожидаемым является:

  • Новое сообщение А отправил на "VirtualTopic.firstTopic"
  • Новое сообщение B опубликовано в "VirtualTopic.secondTopic"
  • Слушатель «Consume.FIRST .VirtualTopic.firstTopic»на„VirtualTopic.firstTopic“будет обрабатывать сообщение A.
  • слушатель„Consume.SECOND.VirtualTopic.firstTopic“на„VirtualTopic.secondTopic“будет обрабатывать сообщение B.
  • Если й e FIRST прослушиватель не сможет выполнить повторную попытку через 15 минут.
  • Если ВТОРОЙ прослушиватель терпит неудачу, ничего не происходит. Сообщение закончится в очереди мертвых букв.

Я взял конфигурацию с этой страницы:

http://activemq.apache.org/redelivery-policy.html

ли кто-нибудь совершил что-то вроде этого? Благодарю.

+0

это решило проблему? –

ответ

0

Политики устанавливаются на уровне ActiveMQConnectionFactory или ActiveMQConnection - если ваши политики различны, вам необходимо использовать разные фабрики подключений в своем проекте. В случае, о котором вы упомянули, вам необходимо определить 2 отдельных фабрики соединений ActiveMQ со своими политиками переопределения. Надеюсь, это поможет

+0

У нас есть такой подход в нашем списке возможных решений. Я дам вам знать, как только я попробую это решение. Благодарю. – Perimosh

+0

Спасибо за помощь. Я использовал два разных соединения. Первое соединение - это уже существующее, которое мы использовали в прошлом. Второй - новый, и этот набор устанавливается с полицией по доставке. PooledConnectionFactory connPool = new PooledConnectionFactory(); ActiveMQConnectionFactory activeMQConnectionFactory = новый ActiveMQConnectionFactory ("tcp: // localhost: 61616"); RedeliveryPolicyMap redeliveryPolicyMap = activeMQConnectionFactory.getRedeliveryPolicyMap(); redeliveryPolicyMap.setDefaultEntry (returnReDeveliveryPolicy()); – Perimosh

+0

большой- удачи !! –

Смежные вопросы