#java #spring-boot #rabbitmq #spring-rabbit
Вопрос:
Я использую отправитель spring boot RabbitMQ. Метод возвращает Integer
try {
return rabbitTemplate.convertSendAndReceive(exchange, routingKey,
mapper.writeValueAsString(request),
correlationData);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
и на стороне получателя ответьте:
@RabbitListener(queues = "testQueue", returnExceptions = "true")
public class TestReply {
@RabbitHandler
public Integer handle(String message) throws JsonProcessingException {
throw new IllegalArgumentException()
}
}
Я хочу разобраться IllegalArgumentException
с отправителем. Но тот факт, что я понимаю, это
org.springframework.amqp.support.converter.MessageConversionException: Failed to convert Message content
Cannot deserialize value of type `java.lang.Integer` from Object value (token `JsonToken.START_OBJECT`)
Пожалуйста, помогите мне!
Комментарии:
1. Я думаю, что еще одно исключение создается перед «IllegalArgException».
2. я думаю, что receive получает 1 исключение, но оно пытается привести к целочисленному значению.
Ответ №1:
@RabbitListener.returnExceptions()
.
/**
* Set to "true" to cause exceptions thrown by the listener to be sent to the sender
* using normal {@code replyTo/@SendTo} semantics. When false, the exception is thrown
* to the listener container and normal retry/DLQ processing is performed.
* @return true to return exceptions. If the client side uses a
* {@code RemoteInvocationAwareMessageConverterAdapter} the exception will be re-thrown.
* Otherwise, the sender will receive a {@code RemoteInvocationResult} wrapping the
* exception.
* @since 2.0
*/
String returnExceptions() default "";
Однако это будет работать только с сериализацией Java (не JSON), поскольку исключения, как правило, не подходят для JSON.
Альтернативой является добавление errorHandler
и возврат некоторого специального значения, чтобы сообщить клиенту о том, что произошло исключение.
https://docs.spring.io/spring-amqp/docs/current/reference/html/#annotation-error-handling
Комментарии:
1. Спасибо за ответ, я попробую. Большое спасибо