Spring integration spring集成:MessageProducer只能被引用一次
我想在多个流中使用网关。我的网关定义是:Spring integration spring集成:MessageProducer只能被引用一次,spring-integration,spring-integration-dsl,Spring Integration,Spring Integration Dsl,我想在多个流中使用网关。我的网关定义是: @Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public MarshallingWebServiceOutboundGateway myServiceGateway() { Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); marshaller.setPackagesToScan("blah.*"); Marsh
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public MarshallingWebServiceOutboundGateway myServiceGateway() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setPackagesToScan("blah.*");
MarshallingWebServiceOutboundGateway gateway = new MarshallingWebServiceOutboundGateway(
serviceEndpoint, marshaller, messageFactory);
gateway.setMessageSender(messageSender);
gateway.setRequestCallback(messageCallback);
return gateway;
}
注意,我在scope原型中定义了消息网关bean,因此Spring应该创建多个网关实例。然而,我在启动时收到了这样的信息:
Caused by: java.lang.IllegalArgumentException: A reply MessageProducer may only be referenced once (myServiceGateway) - use @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) on @Bean definition.
为什么它坚持一个网关不能被多次引用?我如何从多个流中使用同一个网关
使用SpringIntegration5.0.4我发现您多次使用了类似于
.handle(myServiceGateway())
的东西
在这种情况下,您必须从此方法中删除@Bean
和@Scope
。它也可以是私有的。JavaDSL过程将为您创建关于此问题的bean。每个流都有自己的实例。按照你的要求
任何Spring集成组件都不能是
@Scope(ConfigurableBeanFactory.Scope\u PROTOTYPE)
。无论如何,它们都是从非原型bean(端点
)引用的。因此,从本质上讲,原型bean的范围增加了。您能展示引用myServiceGateway
bean的代码吗?我刚做了一个测试,结果很好。还要添加完整的堆栈跟踪。