Я использую Spring Integration 5.1.5 (с RabbitMQ, используя spring-integration-amqp
), и я прочитал в документах , что Spring Integration поддерживает типы проектный реактор (этимЯ имею в виду Mono
, Flux
и т. Д.).Но я не могу заставить это работать для ServiceActivator .Я пытаюсь что-то вроде этого:
@ServiceActivator
public Mono<Void> myMethod(List<Message> messages) {
Mono<Void> result = myService.doServiceStuff(messages);
return result;
}
(обратите внимание, что я также пытаюсь заставить myMethod
работать с Flux<Message>
, но это отдельная проблема).
Когда myMethod
возвращает Mono<Void>
Я получаю эту ошибку:
Caused by: org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:426)
at org.springframework.integration.handler.AbstractMessageProducingHandler.doProduceOutput(AbstractMessageProducingHandler.java:284)
at org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:265)
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:223)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:129)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:162)
... 42 common frames omitted
Изменение метода на:
@ServiceActivator
public void myMethod(List<Message> messages) {
Mono<Void> result = myService.doServiceStuff(messages);
result.subscribe(); // This is not what I want to do
}
и подписка на реактивный поток вручнуюзаставить это работать, однако это явно не то, что я хочу сделать.Я предпочел бы ожидать, что spring-integration
Framework будет обрабатывать подписку.
Поддерживается ли это в Spring Integration?Если так, что я делаю не так?