在我的项目中,弹簧石英工艺每 15 分钟运行一次,即每天运行 96 次。这会从数据库中获取某些记录并将其发布到 REST 服务(在 JBoss 7 上运行)。这些记录一般有 50 到 100 条。
在 REST 服务上,有 jms 事件发布者在主题上发布此消息。这个话题有两个消费者。
- 该处理消息并在移动设备上发送推送通知消息
- 与第三方通话(通常需要 4 到 5 秒才能完成通话)
由于它是主题,因此两个消费者都会接收所有消息,但它们会根据某些属性将它们过滤掉,因此很少有消息由一个消费者处理,而由另一个消费者休息。
我的问题是;这是最近一周以来观察到的;消费者 #1 多次收到来自 APNS 的响应作为无效令牌;令牌用于向手机发送推送通知;一段时间后,该消费者停止并且根本不响应,而第二个消费者继续运行。
下面是配置:
<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>
我搜索了另一个发布的问题,但找不到任何相关内容。 你的想法会很有帮助。