如何根据2个不同服务激活器中发生的不同故障进行不同的更新查询?

时间:2015-12-10 16:00:04

标签: spring-integration

spring -integration的xml配置

<int-jdbc:inbound-channel-adapter id="inchannel"
		query="query the db" data-source="dataSource" max-rows-per-poll="1"
		update="update query">
		<int:poller fixed-rate="8000">
			<int:transactional />
		</int:poller>
	</int-jdbc:inbound-channel-adapter>


<bean id="sp" class="main.poll" />

	<int:channel id="ec">
		<int:dispatcher task-executor="taskExecutor" />
	</int:channel>


	<task:executor id="taskExecutor" pool-size="2" />

	<int:service-activator input-channel="inchannel"
		output-channel="ecl" ref="sp" method="grpe">
		<int:request-handler-advice-chain>
			<int:retry-advice recovery-channel="errorchannel" />
		</int:request-handler-advice-chain>
	</int:service-activator>

	<int:service-activator input-channel="ec" ref="sp"
		method="gdl">
      <int:request-handler-advice-chain>
			<int:retry-advice recovery-channel="errorchannel"/>
        </int:request-handler-advice-chain>
	</int:service-activator>

“ec”是一个执行器通道,它从“inchannel”获取输出。“ec”是第二个服务激活器的输入通道。 场景:在第一次服务的所有3次重试失败后,我想要进行更新查询。在第二次服务激活器重试3次之后,我想做另一个不同的更新查询。这是不可能的,因为我只有一个入站适配器。 。我可以使用spring-integration处理它吗?我只想根据我的2个服务激活器中发生的不同故障做不同的更新查询 ..任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

为此,您应在<int-jdbc:outbound-channel-adapter>上使用UPDATE所需的recovery-channel。一个<service-activator>的更新,另一个更新和频道也是另一个<service-activator>

否则您的问题不明确。

请详细说明:

  

这是不可能的,因为我只有一个入站适配器。

如果您的意思是update="update query" <int-jdbc:inbound-channel-adapter>,则无法更改。对于消息传递架构来说,这是一个有点突破的概念。轮询端点必须在向消息发送消息之前完成其工作。我的意思是UPDATEJdbcPollingChannelAdapter之后SELECT完成,然后向inchannel发送消息。您无法控制下游流程。