【问题标题】:Calling service activator vs bean methods in Spring Integration在 Spring Integration 中调用服务激活器与 bean 方法
【发布时间】:2016-05-30 11:25:16
【问题描述】:

在 Spring Integration 中处理消息的方法很少。一种方法是在 <int:enricher> 中调用 bean 的方法,该方法将返回一个对象并将其分配给给定的名称,例如:

<!-- calls getKey method of IdGenerator bean which returns String with some value -->
<int:enricher input-channel="a.channel" output-channel="b.channel" id="preTranslator">
   <int:header name="Key" expression="@IdGenerator.getId(payload)"/> 
</int:enricher>

同样可以用于过滤:

int:filter discard-channel="d.channel" input-channel="b.channel" output-channel="c.channel" 
     expression="@Cache.hasKey(headers.Key) == false"/>

另一方面,我可以在实现MessageProcessor 接口的类上调用&lt;int:service-activator&gt;。它将获取原始消息并返回带有新标头字段的副本。不过,这需要我的班级方法始终使用 MessageBuilder 构建新消息。

目前,我使用第一种方式来丰富简单的字段,并使用服务激活器来从数据库/外部服务请求数据。选择正确方法的正确方法是什么?

【问题讨论】:

    标签: java spring spring-integration


    【解决方案1】:

    首先,&lt;filter&gt; 根本不会更改消息。 given name 应该读作header,看你的情况。

    &lt;service-activator&gt; 总是返回一条新消息。是的,你也可以在那里填充新的headers,你必须使用MessageBuilder。

    完全不清楚您的问题是什么。如果您可以使用配置中的表达式来实现解决方案,那就这样吧。但是,如果您对代码中的消息执行某些操作并想添加/编辑/删除headers,请使用MessageBuilder。

    那真的很好。我认为你应该在你的应用程序中阅读更多的文档和正确的代码。

    最终你会找到最适合自己的风格。例如,我以表达式和 Groovy 脚本结束了一次。根本没有Java代码。但现在我更喜欢Spring Integration Java DSL,因为它更快、更干净、更流畅,并且可以摆脱任何其他配置,如 XML 或 Groovy。现在一切都是 Java 并且 MessageBuilder 仍然在马上!

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多