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

时间:2014-01-13 09:58:53

标签: java spring-integration

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

问题(我认为)是我当前的实现通过了Files而不是Messages,即Spring Integration Messages


为了避免进一步滚动我自己的代码,我后来必须维护它,我想知道是否有一个推荐的结构用于在Spring Integration中构造Messages。我想知道是否有一些推荐的channel与我应该使用的MessageBuilder类似的组合。


流程/代码(最终)

我还没有配置它的代码,但我想最终得到以下组件/进程:

  1. 接收文件,删除文件的页眉和页脚,取出每一行并将其转换为Message<String> (这似乎实际上是Splitter我发送给...
  2. 频道/端点向路由器发送消息
  3. 路由器在Payload中检测格式字符串,并路由到类似于Order Router here ...
  4. 的相应频道
  5. 然后,所选通道构建适当类型的Message,特别是键入的消息。例如,我有以下构建器来构建消息...

    公共类ShippedBoxMessageBuilder实现CustomMessageBuilder {

    @覆盖    public Message buildMessage(String input){       ShippedBox shippedBox =(ShippedBox)ShippedBoxFactory.manufactureShippedFile(输入);       return MessageBuilder.withPayload(shippedBox).build();    }    ...

  6. 邮件按类型路由到相应的处理渠道

  7. 我想要的解决方案似乎让我感到困惑。但是,我故意将两个任务分开1)将文件分成多行Messages<String>和2)将Messages<String>转换为Messages<someType>。因此,我认为我需要一个额外的路由器/消息构建器来完成第二项任务。

1 个答案:

答案 0 :(得分:5)

实际上,Spring Integration中有MessageBuilder支持。

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

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

我建议您阅读Spring Integration in Action本书,以便了解有关此事的更多信息。

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

<强>更新

  

1)将文件分成多行消息

<splitter>适合您。您应该编写一些返回List<String>的POJO - 文件中没有页眉和页脚的行。如何从File读取行不是Spring Integration的任务。特别是,如果“行”是逻辑的,而不是真正的文件行。

  

2)将消息转换为消息

再一次:没有理由构建Message对象。只需在某个变换器(同样是POJO)中构建新的payload并将框架包装到其要发送的消息中。

Payload Type Router说明一切:它检查有效负载类型,但不检查消息类型。 当然,payload也可以是Message,甚至任何标题也可以。

无论如何,您的Builder快照最终会显示一个简单的Spring Integration Message的创建。正如我所说:将一个有效载荷转换为另一个有效载荷并将其从某个POJO返回就足够了,它将用作变换器参考。