весенняя интеграция: на MessageProducer можно ссылаться только один раз - PullRequest
0 голосов
/ 02 мая 2018

Я хочу использовать шлюз в нескольких потоках. Мое определение шлюза:

@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;
}

Обратите внимание, что я определил бин шлюза сообщений в прототипе области видимости, поэтому Spring должен создать несколько экземпляров шлюза. Тем не менее, я получаю это сообщение при запуске:

Caused by: java.lang.IllegalArgumentException: A reply MessageProducer may only be referenced once (myServiceGateway) - use @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) on @Bean definition.

Почему он настаивает на том, что на шлюз нельзя ссылаться более одного раза, и как я могу использовать один и тот же шлюз из нескольких потоков?

Использование пружинной интеграции 5.0.4

1 Ответ

0 голосов
/ 02 мая 2018

Я думаю, что у вас есть что-то вроде .handle(myServiceGateway()) несколько раз.

В этом случае вы должны удалить @Bean и @Scope из этого метода. И это также может быть просто private. Процесс Java DSL создаст вам бины по этому вопросу. И у каждого потока будет свой экземпляр. Как вы и просили.

Любые компоненты Spring Integration не могут быть @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) вообще. В любом случае они ссылаются на компоненты, не являющиеся прототипами (endpoints). Так что, по сути, область применения ваших прототипов bean-компонентов увеличена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...