我们有一个JEE应用程序,它在集群上使用大约40个分区作业。它可以部署在JBoss和WebSphere上。我们遇到2个问题:
JBoss和WebSphere中的消息传递系统故障通常与临时队列连接问题有关
分区作业实际上是由于丢失消息而挂起的。
我读了发帖称切换reply-destination
的outbound-gateway
可提高耐用性和允许在出现故障的情况下重新连接。在inbound-gateway
基本上开始于请求队列2名的听众。
<int-jms:inbound-gateway id="springbatch.inbound.gateway"
connection-factory="springbatch.jmsConnectionFactory"
request-channel="springbatch.slave.jms.request"
request-destination="requestsQueue"
reply-channel="springbatch.slave.jms.response"
concurrent-consumers="2"
max-concurrent-consumers="2"/>
每个工作都有单独的任务outbound-channel
。
<int-jms:outbound-gateway
connection-factory="springbatch.jmsConnectionFactory"
request-channel="jms.channel.1"
request-destination="requestsQueue"
reply-channel="jms.channel.2"
reply-destination="repliesQueue"
correlation-key="JMSCorrelationID" >
<int-jms:reply-listener />
</int-jms:outbound-gateway>
它可以在一台服务器上正常运行,但是当在集群上运行时,分区在集群周围运行,但是主步骤不会得到确认。我认为JMSCoordinationID
as作为关联键将处理匹配JMS消息。
我是否缺少配置文件?
你所拥有的应该起作用;在该模式下,相关性id设置为gatewayId+n
(其中gatewayId
aUUID
为n
增量)。答复容器消息选择器设置为,JMSCorrelationID LIKE gatewayId%
因此应将步骤执行结果正确路由回主服务器。我建议您打开DEBUG
日志记录,并按照双方的消息查看发生的情况。
编辑:
回复:共享JMS端点(下面的评论)。
可以完成,但需要进行一些重组。
在生产者(主)方面,网关和独立的聚合器将必须移至父上下文(每个作业上下文是其子级)。由于分区处理程序必须位于子上下文中,因此您需要一个单独的聚合器类。也就是说,聚合与分区正交,为方便起见,它仅位于该bean中。一个通用的聚合器很好,因为它使用分区处理程序的关联ID来执行作业,并且重新组装的步骤执行结果将被路由到正确的分区处理程序。
使用者(从属)方面比较棘手,因为如果入站网关在单个(父)上下文中,则它stepExecutionRequestHandler
在子上下文中将看不到s的通道。您将需要构建一个路由器以将请求路由到适当的作业上下文。并非没有,只是更多的工作。
该动态FTP Spring集成样品和其自述是一个很好的起点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句