关于SI中的拆分器
元素,我有几个基本问题。
我知道要形成定制的拆分器逻辑,我们需要扩展AbstractMessageSplitter
并覆盖splitMessage
方法。
然后,这些拆分消息的集合将显示在拆分器的输出通道上(假设在传入消息上没有配置回复通道)。
分离器的
输出通道
随后可以成为另一si组件的输入通道
。让我们假设该组件是一个简单的服务激活器
。
手册说集合的“每个”消息将由呈现该集合的下游配置处理。所以在我们的例子中,
service-tivator
将处理每个消息。
1) 我的查询是“谁”确切地迭代集合,并在ServiceActivator的输入通道上显示集合中的“每条”消息?
2)假设我们这里涉及到所有的直接渠道。现在,如果
service-tivato
r的outout-Channel
被配置为nullChannel
,那么一旦第一条消息被成功处理,它仍然会显示来自集合的"下一条"消息吗?
3) 我们假设这里没有
聚合器。另外,我们假设所有涉及的方法都具有非void返回。将消息“收集”到拆分器的
输出通道的调用线程将返回什么?它是否会返回service activator返回的返回类型集合?或者它只会从收集中返回最后处理的消息吗?
我希望我提出的问题足够详细,以便得到澄清。
非常感谢回应。
最好的问候
是的。你问的问题很好!
1) AbstractMessageProducingHandler
:
protected void sendOutputs(Object result, Message<?> requestMessage) {
if (result instanceof Iterable<?> && shouldSplitOutput((Iterable<?>) result)) {
for (Object o : (Iterable<?>) result) {
this.produceOutput(o, requestMessage);
}
}
else if (result != null) {
this.produceOutput(result, requestMessage);
}
}
正是从这里,每个项目都被发送到输出通道
。
2)是的,如果一切都在DirectChannel
上,下一条消息直到完成前一条消息才会发送。实际上,它的工作方式与原始java相同:
for (Object o : collection) {
}
注意:在此sync
情况下,如果当前消息进程失败,则不会发送下一个消息。因为异常
。就像原始Java:-)。
3) 嗯。对于原始Java,它可能看起来像:
split(Collection<?>, Future<?>);
--->>
for (Object o : collection) {
process(Object, Future<?>)
}
确切地说,这个过程是在拆分器中完成的,或者在每个EIP组件中完成得更好。实际上,它们都只在推送模式下工作。即使对回复做了一些操作,实际上也只是推送到
replyChannel
。
因此,如果您不关心回复过程,那么只有第一条消息将填充该
将来的回复
注意,如果您的下游拆分器进程是异步的,例如,
执行器通道
作为输出通道
打开
我认为最后一个问题的答案取决于目标业务逻辑需求。
这可能是一个基本问题,但是有人能解释一下和之间的主要区别并给出一些例子吗?
使用Spring Integr中的拆分器,我拆分了从数据库中的表中选择的数据行。每条消息完成处理后,我想像旧消息一样将每条消息聚合到一条消息中。我该怎么办?我不知道拆分器拆分了多少条消息。我只知道拆分消息头中的相关ID。即使我聚合消息,我也无法制定发布策略。 我如何解决这个问题? 以及是否有任何方法可以使用jdbc-out站网关或jdbc-out站通道适配器一次插入多行数据,而无需使用拆分器插入每
问题内容: PHP告诉我不建议使用split,我应该使用哪种替代方法? 问题答案: 是另一种选择。但是,如果您打算通过 正则表达式 进行拆分,则可以选择替代方法 。
本文向大家介绍React如何进行代码拆分?拆分的原则是什么?相关面试题,主要包含被问及React如何进行代码拆分?拆分的原则是什么?时的应答技巧和注意事项,需要的朋友参考一下 这里我认为react的拆分前提是代码目录设计规范,模块定义规范,代码设计规范,符合程序设计的一般原则,例如高内聚、低耦合等等。 在我们的react项目中: 1、在 api 层面我们单独封装,对外暴露http请求的结果。 2、
我有以下Flume代理配置来读取来自kafka源的消息并将它们写回HDFS接收器 如果每个轮询周期只有一条kafka消息到达,则kafka消息内容是avro数据,并且正确地序列化为文件。 当两个kafka消息到达同一批次时,它们被分组在同一个HDFS文件上,因为avro消息包含两个模式数据,结果文件包含模式数据模式数据,导致它是无效的. avro文件。 如何拆分avro事件以将不同的kafka消息
下面是WebPack4配置代码: 新的配置代码从项目中使用的节点模块中获取所有代码。但我只希望拆分供应商库(我在enrtry配置部分定义),而不希望拆分node_modules中的所有代码。 在本例中:“babel-polyfill”,“react”,“react-dom”,“jquery”,“bootstrap”