Spring 集成 2.2.3.RELEASE @ServiceActivator 未调用
Spring Integration 2.2.3.RELEASE @ServiceActivator not invoked
我有这些版本的遗留代码(Spring 版本:3.2.1.RELEASE 和 Spring 集成版本 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
都会被调用。
如 所示,添加 @EnableIntegration
(自 Spring Integration 第 4 版起可用)可以解决问题,但就我而言,我使用的是 2.2.3 版不提供此注释。如果他们在此版本中提供此注释,我认为我们可以使用它,但是如何使用呢?
其他问题,我可以将Spring 集成版本升级到4 与Spring (3.2.1) 相同的版本吗?
谢谢
编辑
我这样称呼我的配置:
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 集成引擎是从 XML.
触发的
不:不升级 Spring 框架就无法升级 Spring 集成。
我有这些版本的遗留代码(Spring 版本:3.2.1.RELEASE 和 Spring 集成版本 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
都会被调用。
如 @EnableIntegration
(自 Spring Integration 第 4 版起可用)可以解决问题,但就我而言,我使用的是 2.2.3 版不提供此注释。如果他们在此版本中提供此注释,我认为我们可以使用它,但是如何使用呢?
其他问题,我可以将Spring 集成版本升级到4 与Spring (3.2.1) 相同的版本吗? 谢谢
编辑
我这样称呼我的配置:
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 集成引擎是从 XML.
触发的不:不升级 Spring 框架就无法升级 Spring 集成。