gpt4 book ai didi

java - Spring Integration 2.2.3.RELEASE @ServiceActivator 未调用

转载 作者:行者123 更新时间:2023-12-02 10:36:04 25 4
gpt4 key购买 nike

我有这些版本的遗留代码(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());
}
}

当我在 channel 中发送一些消息时,任何 @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>

最佳答案

您缺少将以下内容添加到 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。

关于java - Spring Integration 2.2.3.RELEASE @ServiceActivator 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53285139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com