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

Cro*_*wie 2 java spring-integration

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

问题(我认为)是我当前的实现Files而不是MessagesSpring Integration Messages.


为了避免进一步滚动我自己的代码,我后来必须维护,我想知道是否有一个推荐的结构用于在Spring Integration中构造Messages.如果有一些推荐的组合是什么我不知道是channel喜欢的东西MessageBuilder,我应该使用.


流程/代码(最终)

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

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

    公共类ShippedBoxMessageBuilder实现CustomMessageBuilder {

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

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

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

Art*_*lan 5

实际上,MessageBuilderSpring Integration中有支持.

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

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

我建议你阅读Spring Integration in Action一书,了解更多有关此事的图片.

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

UPDATE

1)将文件分成多行消息

<splitter>是给你的.你应该写一些返回的POJO List<String>- 文件中没有页眉和页脚的行.如何读取行File不是Spring Integration的任务.特别是,如果"线"是逻辑的,而不是真正的文件行.

2)将消息转换为消息

再一次:没有理由建立Message对象.它足以payload在一些变换器(再次POJO)和框架包装中构建新的消息发送.

Payload Type Router为自己说话:它检查有效负载类型,但不检查消息类型.当然,payload也可以是Message,甚至任何标题都可以.

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