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

入站适配器跳过消息

司寇烨伟
2023-03-14

这就是我的配置

<int-file:inbound-channel-adapter id="files" directory="${lz.dir.${ft}}">
    <int:poller fixed-delay="3000" max-messages-per-poll="3"  />
</int-file:inbound-channel-adapter>

<int:bridge input-channel="files" output-channel="sourceFiles" />

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

<int:service-activator  input-channel="sourceFiles" 
                        ref="moveToSource" 
                        method="move" />

<int:aggregator id="filesBuffered" 
                input-channel="sourceFiles"
                output-channel="stagedFiles"
                release-strategy-expression="size() == 10" 
                correlation-strategy-expression="'mes-group'" 
                expire-groups-upon-completion="true" 
                />

<int:channel id="stagedFiles" />

<int:service-activator  input-channel="stagedFiles"
                        ref="moveToStage"   
                        method="move" />

<task:executor id="executor" pool-size="5" queue-capacity="0" rejection-policy="CALLER_RUNS" />

这个想法是每3秒轮询一个目录,并根据通道向调度程序发送3条消息,以允许异步执行。然后根据消息数量聚合消息,然后发送到下一个服务激活器。第一个服务激活器将文件放在源目录中,第二个服务激活器获取聚合列表以将这些文件移动到暂存目录。

似乎发生的情况是,源文件夹跳过了一些文件,但临时文件夹确实获取了所有文件。我的猜测是,轮询器将消息发送到dispatcher通道,但当其线程池变满时,它会忽略文件,但聚合器仍会以某种方式获取所有文件。几乎就像dispatcher通道在线程池限制达到后跳过它接收的文件的第一个service activator步骤,但这些文件仍被传递到下一个通道,因此它们最终仍由第二个service activator处理。

我想做的是让轮询器重新发送被调度程序拒绝的文件。任何想法都将不胜感激。

谢啦

共有1个答案

岳飞航
2023-03-14

对不起,我不明白你的描述,但根据您的配置,它看起来像:

  1. 源文件通道是点对点通道。因此,一次只有一个订阅者可以从该通道获取消息

如果这不是您的案例,请提供正确的配置或解释您的用例。现在它很混乱,抱歉。

HTH

 类似资料:
  • 我有一个,我使用它向kafka发送消息,然后使用接收消息。通信似乎工作正常,我能够发送和接收消息,但格式有点奇怪。我单独向我的出站适配器发送单个消息,但当我收到消息时,我会收到一条消息,所有消息都聚合到该消息的有效负载中。 这就是我收到消息时消息负载的样子 [有效负载={mytopic={0=[字符串消息1,字符串消息2,字符串消息3,字符串消息4,字符串消息5,…]}},标头={id=3934d

  • 我是这个Spring集成和JMS的新手,我开始使用它。在这里,我想通过activemq创建普通的jms消息,并通过spring inbound适配器(消息驱动)接收它。 以下是我的spring配置文件 这是我的测试课。 } 但问题是我不能保证交货。有些时候程序不能接收消息,有些时候它成功了,但有一些警告,如 无法刷新目标“queue://MSG_QUEUE”的JMS连接,将在5000毫秒后重试,原

  • 一切正常,但数据没有显示。 但是当我签入“logcat”时,我发现了这个错误消息: 2021 10月20日11:29:37.387 7327-7327/com。实例myplay E/RecyclerView:未连接适配器;跳过布局 2021-10-20 11:29:37.388 7327-7327/com.example.myplayE/RecyClerView:未连接适配器;跳过布局 主要活动。

  • ListPetientFragment。JAVA 错误是:2021-11-17 18:41:02.417 29997-29997/?E/rtphonemedicat:运行时设置的未知位_标志:0x8000 2021-11-17 18:41:03.628 29997-30029/com。尼戈特。smartphonemedicate E/GED:无法获取GED日志Buf,错误(0)2021-11-17

  • 问题内容: Spring Integration FTP中的入站通道适配器和出站通道适配器之间有什么区别?我应该使用哪一个?何时使用? 我从文档中了解到,出站可以发送任何类型的文件(例如byte [],String,java.io.File),但入站仅限于文件类型。那仅仅是区别还是其他? 问题答案: 我建议您首先阅读理论 。 任何Inbound适配器都旨在从外部系统获取数据。Outbound-放置