我是Spring Integration的新手,我正在使用两个流程:
1.-从sftp读取文件,保存信息。我使用方法" mget"。
2.-保存信息之后,使用方法" mput"重命名在sftp服务器中处理的文件。
这是我的配置:
<bean id="filePrinter" class="com.maven.integration.FilePrinter" />
<int:channel id="outboundChannel"></int:channel>
<int:channel id="aggregateResultsChannel"/>
<int:channel id="toGet"></int:channel>
<int:gateway id="simpleGateway" service-interface="com.maven.integration.FileGateway"
default-request-channel="ftpChannel" />
<int-sftp:outbound-gateway
session-factory="sftpClientFactory"
request-channel="ftpChannel"
command="mget"
command-options="-R -P"
expression="payload"
filename-regex="(new|.*.csv)"
mode="IGNORE"
local-directory-expression="@targetDir.get() + #remoteDirectory"
reply-channel="outboundChannel"
>
<int-sftp:request-handler-advice-chain>
<int:retry-advice />
</int-sftp:request-handler-advice-chain>
</int-sftp:outbound-gateway>
<int:splitter input-channel="outboundChannel" output-channel="toGet"/>
<bean id="targetDir" class="java.util.concurrent.atomic.AtomicReference">
<constructor-arg value="${target}"/>
</bean>
<int:service-activator ref="filePrinter" method="print"
input-channel="toGet"/>
<int-sftp:outbound-gateway
session-factory="sftpClientFactory"
request-channel="toGet"
command="mput"
command-options="-R"
local-directory="src/test/"
expression="payload"
filename-regex="(new|.*.csv)"
mode="IGNORE"
remote-filename-generator-expression="payload.getName() + '.ack'"
remote-directory-expression="#remoteDirectory"
reply-channel="aggregateResultsChannel"
>
<int-sftp:request-handler-advice-chain>
<int:retry-advice />
</int-sftp:request-handler-advice-chain>
</int-sftp:outbound-gateway>
<int:aggregator input-channel="aggregateResultsChannel"/>
目前只执行第一个带有mget命令的出站网关,但第二个出站网关未执行,第二个进程如何运行?
答案 0 :(得分:0)
因为您的toGet
是一个简单的DirectChannel
,其中“每个消息订阅者只有一个”逻辑。同时,您的mput
网关将request-channel="toGet"
网关用作
<int:service-activator>
与is earlier in the config, it is a first subscriber in the
共享此频道的用户。由此,and therefore only this one process the message sent to the
由分割器获取mput
toGet`。
我认为您需要做的事情(如果故事仍然是关于mget
)与您在MGET
中所拥有的完全相反。所以,你应该和分裂一起做这个逻辑,而不是之后。因此,您应该将MPUT
结果发送到拆分器并同时发送到outboundChannel
。为此,我建议您将<publish-subscribe-channel>
更改为outboundChannel
,并在mput
网关中使用request-channel
function f() {
const { remote } = require("electron").remote;
if (remote) {
return remote.getGlobal("abc");
}
return global.abc;
}
。