考虑其中的操作流程如下:
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┬───┐
┌──────┐ │ A │
│ │Poller│ └───┤
└──────┘ ┌────────────┐ ┌────────────┐
│ │ │ Get local │ │ │ │
│ │ file │ ┌────────┐ │SFTP file to│
│ └─────▶'test1.txt' │───▶ Chnnl1 ├───▶ remote │ │
│ │ └────────┘ │ │
│ └────────────┘ └────────────┘ │
│ │
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┬───┐
│ B │
│ └───┤
│ ┌────────────┐ ┌────────────┐ │
│ Get local │ │ │
│ │ file │ ┌────────┐ │SFTP file to│ │
│'test2.txt' │───▶ Chnnl2 │───▶ remote │
│ │ │ └────────┘ │ │ │
└────────────┘ └────────────┘
│ │
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
操作“ A”成功后,应执行操作“ B”。据我所知,我需要在'A'的request-handler-advice-chain
中使用int-file:outbound-channel-adapter
,但是我不知道如何从中调用'B'。我尝试的部分如下。我尝试使用ExpressionEvaluatingRequestHandlerAdvice
,但能够使其工作。有人可以建议在“ A”之后调用“ B”的方法吗?
<int-file:inbound-channel-adapter
directory="/local/dir1"
channel="channel1"
filename-regex="test./txt">
<int:poller fixed-rate="60000"/>
</int-file:inbound-channel-adapter>
<int:channel id="channel1"></int:channel>
<int-sftp:outbound-channel-adapter
session-factory="sessionFactory"
channel="channel1"
remote-directory="/remote/dir">
<int-sftp:request-handler-advice-chain>
<bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
<property name="successChannel" value="?"></property>
<property name="onSuccessExpression" value="?"></property>
</bean>
</int-sftp:request-handler-advice-chain>
</int-sftp:outbound-channel-adapter>
<int-file:inbound-channel-adapter
directory="/local/dir2"
channel="channel2"
filename-regex="test./txt">
</int-file:inbound-channel-adapter>
<int:channel id="channel2"></int:channel>
<int-sftp:outbound-channel-adapter
session-factory="sessionFactory"
channel="channel2"
remote-directory="/remote/dir">
</int-sftp:outbound-channel-adapter>
答案 0 :(得分:1)
如果第二部分完全取决于第一部分,则不能在其中使用<int-file:inbound-channel-adapter>
。这是流程的开始,只能由轮询者的触发器定期产生事件。当然,有一种方法可以在B流中将其作为auto-startup="false"
并在第一个成功后将其启动,但这是否真的是您在寻找...嗯,我什至会说这是不是 操作:发送到<int-sftp:outbound-channel-adapter>
的消息与从第二<int-file:inbound-channel-adapter>
开始的整个流程之间没有一对一的关系。
我不确定那里到底有什么依赖,但是您需要研究一个简单的服务激活器来调用File.list()
或类似的东西,而这些东西实际上已经取决于{{1}的结果}。或真正考虑只使用控制总线来ExpressionEvaluatingRequestHandlerAdvice
start()
秒https://docs.spring.io/spring-integration/docs/current/reference/html/system-management-chapter.html#control-bus