【问题标题】:Spring Integration 2.2.3.RELEASE @ServiceActivator not invokedSpring Integration 2.2.3.RELEASE @ServiceActivator 未调用
【发布时间】:2019-04-16 12:43:37
【问题描述】:

我有这些版本的旧代码(Spring 版本:3.2.1.RELEASE 和 Spring Integration 版本 2.2.3.RELEASE)。我想将spring集成的所有xml配置迁移到java配置。 在开始迁移之前,我正在做一些测试,我正在努力解决 @ServiceActivator 这不起作用。 我的例子是:

@Configuration
@ImportResource("classpath*:integration-config.xml")
public static class IntegrationConfig {
    @Bean
    public MessageChannel queueChannel() {
        return new QueueChannel(5);
    }

    @Bean
    public MessageChannel pubSubChannel() {
        PublishSubscribeChannel publishSubscribeChannel = new PublishSubscribeChannel();
        publishSubscribeChannel.subscribe(new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                System.out.println("First handler :" + message.getPayload());
            }
        });

        publishSubscribeChannel.subscribe(new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                System.out.println("Second handler :" + message.getPayload());
            }
        });
     return publishSubscribeChannel;
    }
}

还有:

@MessageEndpoint
public static class MessageEndpointDefintion {

    @ServiceActivator(inputChannel = "queueChannel")
    public void queueActivator(String payload) {
        System.out.println("Payload from queue : " + payload);
    }

    @ServiceActivator(inputChannel = "pubSubChannel")
    public void pubSubActivator(Message<String> message) {
        System.out.println("Payload from pub-sub :" + message.getPayload());
    }
}

当我在频道中发送一些消息时,任何@ServiceActivator 都会被调用。

here: 所示,添加 @EnableIntegration(自 Spring Integration 版本 4 起可用)可以解决问题,但在我的情况下,我使用的是不提供此注释的版本 2.2.3。如果他们在此版本中提供此注释,我认为我们可以使用它,但如何使用?

其他问题,我可以用相同版本的 Spring (3.2.1) 将 Spring Integration 版本升级到 4 吗? 谢谢

编辑

我这样称呼我的配置: AbstractApplicationContext context = new AnnotationConfigApplicationContext(IntegrationConfig.class); 和测试示例:

PublishSubscribeChannel publishSubscribeChannel;
publishSubscribeChannel = (PublishSubscribeChannel) context.getBean("pubSubChannel", MessageChannel.class);
publishSubscribeChannel.send(MessageBuilder.withPayload("==PUB-SUB-CHANNEL== ").build());

还有integration-config.xml

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.springframework.org/schema/c"
   xmlns:int="http://www.springframework.org/schema/integration"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd">

<int:annotation-config/>

<xsd:element name="annotation-config">
    <xsd:annotation>
        <xsd:documentation>
            Enables annotation support for Message Endpoints.
        </xsd:documentation>
    </xsd:annotation>
</xsd:element>

【问题讨论】:

    标签: java spring spring-integration integration spring-annotations


    【解决方案1】:

    您缺少将以下内容添加到您的 XML 配置中:

    <int:annotation-config/>
    
    <xsd:element name="annotation-config">
        <xsd:annotation>
            <xsd:documentation>
                Enables annotation support for Message Endpoints.
            </xsd:documentation>
        </xsd:annotation>
    

    不幸的是,旧版本不能只使用简单的注释。整个 Spring Integration 引擎由 XML 触发。

    不:不升级 Spring Framework 就无法升级 Spring Integration。

    【讨论】:

    • 在我的主类中,我使用注释配置:AbstractApplicationContext context = new AnnotationConfigApplicationContext(IntegrationConfig.class);
    • 好吧,你不听:Spring Integration 仍然无法仅使用简单的 Java 和注释配置。您需要在您的@Configuration 上添加至少带有该标签的简单 XML 和 @ImportResource
    • 我添加了一个并按照建议导入它,但结果相同。我编辑了我的帖子以获取更多信息
    • 现在工作正常,似乎将@ServiceActivator 用于队列通道会导致一些麻烦,因为我们有任何方法可以在注释中定义轮询器。非常感谢您的帮助
    • 对,在那个旧版本中,您不能将QueueChannel 用于@ServiceActivator。从版本4.0 开始,面对@Poller 子注释,这变得可用了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多