Один JMS Consumer перестает слушать активную тему mq, а второй нет
Процесс пружинного кварца выполняется в моем проекте каждые 15 минут, т.е. 96 раз в день. Это извлекает определенные записи из базы данных и отправляет их в службу REST (работает на JBoss 7). Эти записи, как правило, насчитывают от 50 до 100.
На службе REST есть издатель событий jms, который публикует это сообщение по теме. На эту тему есть два потребителя.
- Это обрабатывает сообщение и отправляет push-уведомления на мобильный
- Поговорите с третьим лицом (обычно для завершения вызова требуется от 4 до 5 секунд)
Поскольку это тема, оба потребителя получают все сообщения, но отфильтровывают их по какому-либо свойству, поэтому немногие сообщения обрабатываются одним, а остальные - другим.
Моя проблема в том, который наблюдается недавно с недельного времени; тот потребитель #1 получает ответ от APNS как недействительный токен несколько раз; токен используется для отправки push-уведомлений на мобильный телефон; через некоторое время этот потребитель останавливается и вообще не отвечает, а второй продолжает работать.
Ниже приведены конфигурации:
<amq:broker id="broker" useJmx="false" persistent="false">
<amq:transportConnectors>
<amq:transportConnector uri="tcp://localhost:0"/>
</amq:transportConnectors>
</amq:broker>
<!-- ActiveMQ Destination -->
<amq:topic id="topicName" physicalName="topicPhysicalName"/>
<!-- JMS ConnectionFactory to use, configuring the embedded broker using XML -->
<amq:connectionFactory id="jmsFactory" brokerURL="vm://localhost"/>
<!-- JMS Producer Configuration -->
<bean id="jmsProducerConnectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory"
depends-on="broker"
p:targetConnectionFactory-ref="jmsFactory"/>
<!-- JMS Templates-->
<bean id="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate"
p:connectionFactory-ref="jmsProducerConnectionFactory"/>
<!-- Publisher-->
<bean name="jmsEventPublisher"
class="com.jhi.mhm.services.event.jms.publisher.JMSEventPublisher">
<property name="jmsTemplate" ref="jmsTemplate"/>
<property name="topic">
<map>
<entry key="keyname" value-ref="topicName"/>
</map>
</property>
</bean>
<!-- JMS Consumer Configuration -->
<bean name="consumer2" class="Consumer2"/>
<bean name="consumer1" class="Consumer1"/>
<bean id="jmsConsumerConnectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory"
depends-on="broker"
p:targetConnectionFactory-ref="jmsFactory"/>
<jms:listener-container container-type="default"
connection-factory="jmsConsumerConnectionFactory"
acknowledge="auto"
destination-type="topic">
<jms:listener destination="topicPhysicalName" ref="consumer1"/>
<jms:listener destination="topicPhysicalName" ref="consumer2"/>
</jms:listener-container>
Я ищу другие опубликованные вопросы, но не могу найти ничего связанного. Ваши мысли были бы очень полезны.
1 ответ
Шайлу - я пережил подобную проблему. Мы обновили версию MQ. Хотя это не решило проблему полностью, так как MQ показывает случайное поведение, и в конце мы просто объединили нашу конечную точку и назначение вызова согласно логике бизнеса