spring-integration: MessageProducer можно ссылаться только один раз

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

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

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

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

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

Использование Spring-Integration 5.0.4


person dschulten    schedule 02.05.2018    source источник
comment
Можете ли вы показать код, который ссылается на bean-компонент myServiceGateway? Я только что провел тест, и у меня все получилось. Также добавьте полную трассировку стека.   -  person Gary Russell    schedule 02.05.2018


Ответы (1)


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

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

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

person Artem Bilan    schedule 02.05.2018