我有一个我编码的应用程序,为了更好地利用Spring Integration,我正在对其进行重构。该应用程序处理文件的内容。
问题(如我所见)是我当前的实现通过Files
了Messages
,而不是Spring Integration Messages
。
为了避免进一步滚动我自己的代码(以后必须维护),我想知道在Spring Integration中是否存在用于构造Messages的推荐结构。我想知道的是,是否建议将某些建议channel
与类似的东西结合MessageBuilder
使用。
我还没有配置它的代码,但是我想得到以下组件/过程:
Message<String>
(似乎实际上是一个Splitter
),然后发送至...然后,选定的通道将构建适当类型的消息,特别是键入的消息。例如,我有以下构建器来构建消息...
公共类ShippedBoxMessageBuilder实现CustomMessageBuilder {
@Override public Message buildMessage(String input){ShippedBox paidBox =(ShippedBox)ShippedBoxFactory.manufactureShippedFile(input); 返回MessageBuilder.withPayload(shippedBox).build(); } ...
消息按类型路由到适当的处理通道
我想要的解决方案似乎确实使它复杂化了。但是,我有目的地分离了两个任务:1)将文件分成多行,Messages<String>
以及2)转换Messages<String>
为Messages<someType>
。因此,我认为第二个任务需要一个额外的路由器/消息生成器。
实际上,MessageBuilder
Spring 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中返回它就足够了,您可以将其用作转换器参考。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句