当前位置: 首页 > 知识库问答 >
问题:

我可以从入站通道适配器处理程序中发送Spring Integration Channel消息吗?

公西俊才
2023-03-14

如果某些条件允许,我希望从我的文件入站通道适配器的处理程序中向另一个通道发送消息。有时入站文件有超出规范的值,我希望将该文件发送到错误目录,但不要中断入站到出站的流程,因为即使超出规范的文件也需要转到辅助位置。

我的配置示例:

<int-file:inbound-channel-adapter id="filesIn"
                                  directory="${input.path}"
                                  filename-regex="\\d{8}-\\d+\\.txt">
    <int:poller id="poller" fixed-rate="500"/>
</int-file:inbound-channel-adapter>

<int-file:file-to-string-transformer input-channel="filesIn"
                                     output-channel="strings"
                                     delete-files="true" />

<int:channel id="strings"/>
<int:channel id="errorChannel" />

<int:exception-type-router input-channel="strings"
                           default-output-channel="output">
    <int:mapping exception-type="ca.uhn.hl7v2.HL7Exception"
                 channel="errorChannel"/>
</int:exception-type-router>

<int:service-activator input-channel="output"
                               output-channel="archive"
                               ref="handler" method="handleString"/>

<int:service-activator input-channel="errorChannel"
                       output-channel="errorOutput"
                       ref="handler" method="handleError" />

<int-file:outbound-channel-adapter id="archive"
                                   directory="${archive.path}"
                                   delete-source-files="true"/>

<int-file:outbound-channel-adapter id="errorOutput"
                                   directory="${hl7.error.path}"/>

<bean id="handler" class="com.giotta.service.Hl7MessageConsumer"/>

共有1个答案

申屠昆
2023-03-14

从术语的角度来看,入站适配器没有“处理程序”。根据类型的不同,它们要么是消息源,要么是消息生产者。

也就是说,您可以在入站适配器之后立即添加路由器,并根据您想要的任何条件路由到不同的信道。

编辑

<int-file:inbound-channel-adapter id="filesIn"
                                  directory="${input.path}"
                                  filename-regex="\\d{8}-\\d+\\.txt">
    <int:poller id="poller" fixed-rate="500" error-channel="errorChannel" />
</int-file:inbound-channel-adapter>

<int-file:file-to-string-transformer input-channel="filesIn"
                                     output-channel="strings"
                                     delete-files="true" />

<int:channel id="strings"/>

<int:service-activator input-channel="strings"
                               output-channel="archive"
                               ref="handler" method="handleString"/>

<int-file:outbound-channel-adapter id="archive"
                                   directory="${archive.path}"
                                   delete-source-files="true"/>

<int:channel id="errorChannel" />

<int:service-activator input-channel="errorChannel"
                       output-channel="errorOutput"
                       ref="handler" method="handleError" />

<int-file:outbound-channel-adapter id="errorOutput"
                                   directory="${hl7.error.path}"/>

<bean id="handler" class="com.giotta.service.Hl7MessageConsumer"/>

除了“ErrorOutput”适配器之外,我仍然希望字符串转到“Archive”适配器。

那样的话...

<int:publish-subscribe-channel id="errorChannel" />

<int:service-activator input-channel="errorChannel"
                       output-channel="errorOutput"
                       ref="handler" method="handleError" />

<int:transformer input-channel="errorChannel"
            output-channel="archive" expression="payload.failedMessage" />
 类似资料:
  • 使用Spring Integration Kafka,使用出站通道适配器,我尝试向名为“test”的主题发送消息 通过命令行终端,我启动了动物园管理员、kafka并创建了名为“test”的主题 Spring XML配置 JUnit测试代码 测试用例成功,在调试时,我发现channel.send()返回true 我使用下面的命令通过命令行检查了主题,但是我在测试主题中看不到任何消息。 bin/kaf

  • 这就是我的配置 这个想法是每3秒轮询一个目录,并根据通道向调度程序发送3条消息,以允许异步执行。然后根据消息数量聚合消息,然后发送到下一个服务激活器。第一个服务激活器将文件放在源目录中,第二个服务激活器获取聚合列表以将这些文件移动到暂存目录。 似乎发生的情况是,源文件夹跳过了一些文件,但临时文件夹确实获取了所有文件。我的猜测是,轮询器将消息发送到dispatcher通道,但当其线程池变满时,它会忽

  • 我有客户端代码运行在javascript试图发送html内容到自定义处理程序。 客户端代码如下所示: 处理程序代码为: 问题在于,使用Chrome浏览器时,处理程序获取的消息(txt_内容)不完整。我得到的字符串的最大长度是:524288 当我在资源管理器中运行时,我会得到完整的消息(长度=567130)。 我在这里看到了一个类似的问题,但没有得到回答(设置maxAllowedContentLen

  • 如果我创建一个SFTP入站通道适配器,并使用在SFTP中配置为channel属性的通道发送一些文件。文件将传输到SFTP远程目录本地目录,还是直接从通道流到本地目录