【问题标题】:Service Activator reuse not working服务激活器重用不起作用
【发布时间】:2017-06-24 14:27:02
【问题描述】:

在服务激活器文档中它说:

如果自定义服务激活器处理程序实现可以在其他定义中重用,通常建议使用“ref”属性。

但下面的 sn-p 给了我

IllegalArgumentException:AbstractReplyProducingMessageHandler 只能被引用一次

<bean id="groupResequencer" class="com.core.flow.GroupResequencer"/>
<int:service-activator id="groupResequencer1" ref="groupResequencer"/>
<int:service-activator id="groupResequencer2" ref="groupResequencer"/>

当我将 bean 定义更改为原型时,它可以工作,但 onInit() 方法被调用了两次,一次使用通用组件名称,第二次使用 spring 集成服务激活器 ID 作为组件名称。

bean 是单例还是原型对我来说并不重要,但我需要一个只发生一次的干净创建。

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    我们需要改进该文档 - 它仅适用于 ref 引用 POJO。

    前段时间,我们为服务激活器添加了优化,如果 ref bean 是 AbstractReplyProducingMessageHandler,我们直接引用它而不是将其包装在新的处理程序中,以避免这种开销。

    由于这样一个 bean 只能有一个 outputChannel 我们不能在多个端点中使用它。将其作为原型意味着每个服务激活器都有自己的实例。

    如果您将 bean 更改为 POJO 而不是从 ARPMH 扩展,您可以这样重用它。

    【讨论】:

    • 感谢您的澄清!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 2011-02-06
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多