我正在使用Spring和WebSphere MQ实现以下消息配置。在一个场景中,我需要实现重试逻辑:当我从队列接收一条消息并将消息数据放到Elasticsearch服务器上(搜索服务器是非事务性的),如果搜索服务器不可用,我必须将该消息回滚到队列上,并在一段时间后再次处理该消息(例如30秒)。这个重试过程要进行5次。5次后,消息必须被放到死信队列中。我们使用Tomcat作为服务器。我们使用Spring Integration jms:message-driven-channel-adapter来接收消息。
如何使用Spring和WebSphere MQ实现这个行为呢?
我已经查遍了许多网站,发现有关ActiveMQ的支持,但没有关于IBM MQ的支持。
如何使用Spring和WebSphere MQ实现这个行为呢?
我已经查遍了许多网站,发现有关ActiveMQ的支持,但没有关于IBM MQ的支持。
<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName">
<value>${queue_hostname}</value>
</property>
<property name="port">
<value>${queue_port}</value>
</property>
<property name="queueManager">
<value>${queue_manager}</value>
</property>
<property name="transportType">
<value>1</value>
</property>
</bean>
<!-- JMS Queue Connection Factory -->
<bean id="jmsQueueConnectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory102">
<property name="targetConnectionFactory">
<ref bean="mqConnectionFactory" />
</property>
<property name="pubSubDomain">
<value>false</value>
</property>
</bean>
<!-- JMS Destination Resolver -->
<bean id="jmsDestinationResolver"
class="org.springframework.jms.support.destination.DynamicDestinationResolver">
</bean>
<!-- JMS Queue Template -->
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate102">
<property name="connectionFactory">
<ref bean="jmsQueueConnectionFactory" />
</property>
<property name="destinationResolver">
<ref bean="jmsDestinationResolver" />
</property>
<property name="pubSubDomain">
<value>false</value>
</property>
<property name="receiveTimeout">
<value>20000</value>
</property>
</bean>