小编典典

我应该如何在Spring Integration中构建我的消息?

java

我有一个我编码的应用程序,我正在对其进行重构以更好地利用Spring Integration。该应用程序处理文件的内容。

问题(如我所见)是我当前的实现通过FilesMessages,而不是Spring Integration
Messages

为了避免进一步滚动我自己的代码(以后必须维护),我想知道在Spring
Integration中是否存在用于构造Messages的推荐结构。我想知道的是,是否建议将某些建议channel与类似的东西结合MessageBuilder使用。


流程/代码(最终)

我还没有配置它的代码,但是我想用以下组件/过程结束:

  1. 接收文件,删除文件的页眉和页脚,每行并将其转换为Message<String> (似乎实际上是一个Splitter,然后发送至…
  2. 通道/端点向路由器发送消息
  3. 路由器在有效负载中检测格式字符串,并路由到类似于此处的订购路由器的适当通道…
  4. 然后,选定的通道将构建适当类型的消息,特别是键入的消息。例如,我有以下构建器来构建消息…

公共类ShippedBoxMessageBuilder实现CustomMessageBuilder {

@Override public Message buildMessage(String input){ShippedBox
transportationBox
=(ShippedBox)ShippedBoxFactory.manufactureShippedFile(input);
返回MessageBuilder.withPayload(shippedBox).build(); } …

  1. 消息按类型路由到适当的处理通道

我想要的解决方案似乎确实使它复杂化了。但是,我有目的地分离了两个任务:1)将文件分成多行,Messages<String>以及2)转换Messages<String>Messages<someType>。因此,我认为第二个任务需要一个额外的路由器/消息生成器。


阅读 207

收藏
2020-11-26

共1个答案

小编典典

实际上,MessageBuilderSpring
Integration中有支持。

这种框架的一般目的是帮助后端开发人员将其域代码与消息传递基础结构分离。最后,要使用Spring Integration,您需要遵循POJO和方法调用原则。

您编写自己的服务,转换器和域模型。然后,您只需使用一些开箱即用的组件(例如<int-file:inbound-channel- adapter>),然后从那里引用您的POJO,反之则不然。

我建议您阅读《Spring Integration in
Action》
一书,以获取更多有关此问题的图片。

您能解释一下直接处理Spring Integration组件的原因吗?

更新

1)将文件分成多行消息

<splitter>是给你的。您应该编写一些POJO来返回List<String>-文件中没有标题和页脚的行。如何从中读取行File不是Spring
Integration的任务。特别是,如果“行”是逻辑的,则不是实际的文件行。

2)将消息转换为消息

再过一次:没有理由建立Message对象。这足以payload在某些转换器(再次为POJO)中构建新内容并将其框架包装到要发送的消息中。

Payload Type Router不言而喻:它检查有效载荷类型,而不检查消息类型。当然,payload也可以是Message,甚至任何标头也可以。

无论如何,您的Builder快照最后都会精确显示纯Spring Integration
Message的创建。就像我说的:仅将一个有效负载转换为另一个有效负载并从某个POJO中返回它就足够了,您可以将其用作转换器参考。

2020-11-26