У меня есть метод с @SqsListener, который возвращает строковое значение. Он работал нормально с аннотацией @SendTo (получить сообщение из SQS, а затем переслать возвращенное значение в другой SQS). Теперь возвращаемое значение больше не нужно пересылать, но оно все еще необходимо для другого кода. Я все еще позволяю методу возвращать строковое значение. Также я удаляю аннотацию @SendTo, которая вызывает исключение: java.lang.IllegalStateException: нет обработчика для типа возвращаемого значения: class java.lang.String
Метод:
@SqsListener(value = "shipment_process")
//@SendTo("queue") the code works with this annotation
public String shipmentProcess(@Payload ArchivedNotificationMetadataEntity entity)
Исключение:
shipments_1 | java.lang.IllegalStateException: No handler for return value type: class java.lang.String
shipments_1 | at org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:102) ~[spring-messaging-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]
shipments_1 | at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMatch(AbstractMethodMessageHandler.java:529) ~[spring-messaging-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]
shipments_1 | at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessageInternal(AbstractMethodMessageHandler.java:475) ~[spring-messaging-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]
shipments_1 | at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:411) ~[spring-messaging-5.0.7.RELEASE.jar!/:5.0.7.RELEASE]
shipments_1 | at org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer.executeMessage(SimpleMessageListenerContainer.java:205) ~[spring-cloud-aws-messaging-2.0.1.RELEASE.jar!/:2.0.1.RELEASE]
shipments_1 | at org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer$MessageExecutor.run(SimpleMessageListenerContainer.java:342) ~[spring-cloud-aws-messaging-2.0.1.RELEASE.jar!/:2.0.1.RELEASE]
shipments_1 | at org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer$SignalExecutingRunnable.run(SimpleMessageListenerContainer.java:397) ~[spring-cloud-aws-messaging-2.0.1.RELEASE.jar!/:2.0.1.RELEASE]
shipments_1 | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_201]
shipments_1 | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_201]
shipments_1 | at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
Поэтому мне интересно, разработано ли это специально (возвращаемое значение должно иметь аннотацию @SendTo) или я сделал что-то еще неправильно? Кто-нибудь знает обходной путь для этого случая? Я думаю, что имеет смысл пересылать сообщения только тогда, когда мы захотим, добавив аннотацию @SendTo