我有一个我编码的应用程序,我正在对其进行重构以更好地利用Spring Integration。该应用程序处理文件的内容。
问题(如我所见)是我当前的实现通过Files了Messages,而不是Spring Integration Messages。
Files
Messages
为了避免进一步滚动我自己的代码(以后必须维护),我想知道在Spring Integration中是否存在用于构造Messages的推荐结构。我想知道的是,是否建议将某些建议channel与类似的东西结合MessageBuilder使用。
channel
MessageBuilder
我还没有配置它的代码,但是我想用以下组件/过程结束:
Message<String>
Splitter
公共类ShippedBoxMessageBuilder实现CustomMessageBuilder {
@Override public Message buildMessage(String input){ShippedBox transportationBox =(ShippedBox)ShippedBoxFactory.manufactureShippedFile(input); 返回MessageBuilder.withPayload(shippedBox).build(); } …
我想要的解决方案似乎确实使它复杂化了。但是,我有目的地分离了两个任务:1)将文件分成多行,Messages<String>以及2)转换Messages<String>为Messages<someType>。因此,我认为第二个任务需要一个额外的路由器/消息生成器。
Messages<String>
Messages<someType>
实际上,MessageBuilderSpring Integration中有支持。
这种框架的一般目的是帮助后端开发人员将其域代码与消息传递基础结构分离。最后,要使用Spring Integration,您需要遵循POJO和方法调用原则。
您编写自己的服务,转换器和域模型。然后,您只需使用一些开箱即用的组件(例如<int-file:inbound-channel- adapter>),然后从那里引用您的POJO,反之则不然。
<int-file:inbound-channel- adapter>
我建议您阅读《Spring Integration in Action》一书,以获取更多有关此问题的图片。
您能解释一下直接处理Spring Integration组件的原因吗?
更新
1)将文件分成多行消息
这<splitter>是给你的。您应该编写一些POJO来返回List<String>-文件中没有标题和页脚的行。如何从中读取行File不是Spring Integration的任务。特别是,如果“行”是逻辑的,则不是实际的文件行。
<splitter>
List<String>
File
2)将消息转换为消息
再过一次:没有理由建立Message对象。这足以payload在某些转换器(再次为POJO)中构建新内容并将其框架包装到要发送的消息中。
Message
payload
Payload Type Router不言而喻:它检查有效载荷类型,而不检查消息类型。当然,payload也可以是Message,甚至任何标头也可以。
Payload Type Router
无论如何,您的Builder快照最后都会精确显示纯Spring Integration Message的创建。就像我说的:仅将一个有效负载转换为另一个有效负载并从某个POJO中返回它就足够了,您可以将其用作转换器参考。
Builder