使用应答目的地分区工作(Partitioned jobs using reply destinati

2019-10-21 11:15发布

我们有一个集群上使用约40分区的就业机会JEE应用程序。 它可以部署在两个JBoss的和WebSphere。 我们遇到两个问题:

  • 在将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的相关键将处理匹配了JMS消息。

我缺少的配置一块?

Answer 1:

你有什么应该工作; 在该模式中,相关性id设定为gatewayId+n (其中gatewayId是一个UUIDn增量)。 回复容器消息选择器设置为JMSCorrelationID LIKE gatewayId%所以步骤的执行结果应正确路由回给主站。 我建议你打开DEBUG日志记录,并按照双方的消息,看看发生了什么。

编辑:

回复:分享JMS端点(评论如下)。

这是可以做到,但需要一点点调整。

在制片人(主)侧,网关和独立的聚合将不得不转移到父上下文(每个任务的上下文是它的孩子)。 由于分区处理程序必须是在孩子方面,你将需要一个单独的聚合类; 这么说,聚合是正交的分区,它只是在豆为了方便。 一个常见的聚合是好的,因为它使用的分区处理程序的关联ID作业的执行和重新组装步骤的执行结果将被路由到正确的分区处理。

消费者(从)侧是一个比较棘手,因为如果入站网关是单一(父)上下文)不会有知名度的stepExecutionRequestHandler S'在孩子方面渠道; 你需要一台路由器建立请求路由到适当的工作环境。 不是不可能的,更多的只是一点工作。

该动态FTP Spring集成样品和其自述是一个很好的起点。



文章来源: Partitioned jobs using reply destination