我有一个我编码的应用程序,我正在重构以更好地利用Spring Integration。应用程序处理文件的内容。
问题(我认为)是我当前的实现通过了Files
而不是Messages
,即Spring Integration Messages
。
为了避免进一步滚动我自己的代码,我后来必须维护它,我想知道是否有一个推荐的结构用于在Spring Integration中构造Messages。我想知道是否有一些推荐的channel
与我应该使用的MessageBuilder
类似的组合。
我还没有配置它的代码,但我想最终得到以下组件/进程:
Message<String>
(这似乎实际上是Splitter
)我发送给... 然后,所选通道构建适当类型的Message,特别是键入的消息。例如,我有以下构建器来构建消息...
公共类ShippedBoxMessageBuilder实现CustomMessageBuilder {
@覆盖 public Message buildMessage(String input){ ShippedBox shippedBox =(ShippedBox)ShippedBoxFactory.manufactureShippedFile(输入); return MessageBuilder.withPayload(shippedBox).build(); } ...
邮件按类型路由到相应的处理渠道
我想要的解决方案似乎让我感到困惑。但是,我故意将两个任务分开1)将文件分成多行Messages<String>
和2)将Messages<String>
转换为Messages<someType>
。因此,我认为我需要一个额外的路由器/消息构建器来完成第二项任务。
答案 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返回就足够了,它将用作变换器参考。