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

咕row

我有一个我编码的应用程序,为了更好地利用Spring Integration,我正在对其进行重构。该应用程序处理文件的内容。

问题(如我所见)是我当前的实现通过FilesMessages而不是Spring Integration Messages


为了避免进一步滚动我自己的代码(以后必须维护),我想知道在Spring Integration中是否存在用于构造Messages的推荐结构。我想知道的是,是否建议将某些建议channel与类似的东西结合MessageBuilder使用。


流程/代码(最终)

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

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

    公共类ShippedBoxMessageBuilder实现CustomMessageBuilder {

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

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

我想要的解决方案似乎确实使它复杂化了。但是,我有目的地分离了两个任务:1)将文件分成多行,Messages<String>以及2)转换Messages<String>Messages<someType>因此,我认为第二个任务需要一个额外的路由器/消息生成器。

阿尔特姆·比兰(Artem Bilan)

实际上,MessageBuilderSpring 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我应该如何在mysql中查询

来自分类Dev

我应该如何在我的React组件+ Redux中构建onClick动作

来自分类Dev

我应该如何在Spring中实现一个缓存对象/系统?

来自分类Dev

我应该如何在Spring中实现一个缓存对象/系统?

来自分类Dev

我应该如何在Rails中实现我的Ruby代码?

来自分类Dev

我应该如何在Linux中获取特定于平台的jni标头以进行交叉构建?

来自分类Dev

我们如何在Azure DevOps构建管道中读取GIT提交消息?

来自分类Dev

我应该如何在Rails中禁用一些设计Flash消息

来自分类Dev

我应该如何在Node中管理内存中的数据?

来自分类Dev

我应该如何在Rails中存储属性的集合?

来自分类Dev

我应该如何在子类中定义这些生物?

来自分类Dev

我应该如何在集群中复制键空间

来自分类Dev

我应该如何在mongodb中存储布尔值?

来自分类Dev

我应该如何在TypeScript 2中使用@types

来自分类Dev

我应该如何在JSHint 2.5.0中尾随空格?

来自分类Dev

我应该如何在Linux容器(lxc)中运行android?

来自分类Dev

我应该如何在Python中引用类变量?

来自分类Dev

我应该如何在DocumentDb中存储很多行

来自分类Dev

我应该如何在.bat文件中打印此文件?

来自分类Dev

我应该如何在Virtual TreeView中更新节点?

来自分类Dev

我应该如何在Rmarkdown的数据框中打印分数?

来自分类Dev

我应该如何在iOS中设置UICollectionView的约束

来自分类Dev

我应该如何在Codeigniter中布置代码?

来自分类Dev

我应该如何在子类中定义这些生物?

来自分类Dev

我应该如何在Windows中安装Python模块

来自分类Dev

我应该如何在Rails中设置复杂的工厂?

来自分类Dev

我应该如何在MVC中编辑模型条目?

来自分类Dev

我应该如何在MySQL中过滤日期

来自分类Dev

我应该如何在棉花糖中添加许可请求?

Related 相关文章

  1. 1

    我应该如何在mysql中查询

  2. 2

    我应该如何在我的React组件+ Redux中构建onClick动作

  3. 3

    我应该如何在Spring中实现一个缓存对象/系统?

  4. 4

    我应该如何在Spring中实现一个缓存对象/系统?

  5. 5

    我应该如何在Rails中实现我的Ruby代码?

  6. 6

    我应该如何在Linux中获取特定于平台的jni标头以进行交叉构建?

  7. 7

    我们如何在Azure DevOps构建管道中读取GIT提交消息?

  8. 8

    我应该如何在Rails中禁用一些设计Flash消息

  9. 9

    我应该如何在Node中管理内存中的数据?

  10. 10

    我应该如何在Rails中存储属性的集合?

  11. 11

    我应该如何在子类中定义这些生物?

  12. 12

    我应该如何在集群中复制键空间

  13. 13

    我应该如何在mongodb中存储布尔值?

  14. 14

    我应该如何在TypeScript 2中使用@types

  15. 15

    我应该如何在JSHint 2.5.0中尾随空格?

  16. 16

    我应该如何在Linux容器(lxc)中运行android?

  17. 17

    我应该如何在Python中引用类变量?

  18. 18

    我应该如何在DocumentDb中存储很多行

  19. 19

    我应该如何在.bat文件中打印此文件?

  20. 20

    我应该如何在Virtual TreeView中更新节点?

  21. 21

    我应该如何在Rmarkdown的数据框中打印分数?

  22. 22

    我应该如何在iOS中设置UICollectionView的约束

  23. 23

    我应该如何在Codeigniter中布置代码?

  24. 24

    我应该如何在子类中定义这些生物?

  25. 25

    我应该如何在Windows中安装Python模块

  26. 26

    我应该如何在Rails中设置复杂的工厂?

  27. 27

    我应该如何在MVC中编辑模型条目?

  28. 28

    我应该如何在MySQL中过滤日期

  29. 29

    我应该如何在棉花糖中添加许可请求?

热门标签

归档