kin*_*iko 8 java spring rabbitmq spring-rabbit spring-amqp
我将线程本地兔子消息数据存储在MDC中.我想清除旧的并为传入的兔子消息添加新的上下文数据,例如从头部读取某些值或将兔子消息有效负载读取为byte[].不幸的是,我经常看到在消息发出带@RabbitHandler注释的方法之前发生异常.是否有一个更早的入口点可以用来建立这个上下文?我不知道在反序列化发生之前会发生什么,但理想情况下我想在尝试反序列化之前访问该消息.也许在onMessageReceived(byte[] message, Map headers)某处有一个方法钩子.调用堆栈越早越好.
由可以通过自定义提供的@RabbitHandler填充:https://docs.spring.io/spring-amqp/docs/2.0.1.RELEASE/reference/html/_reference.html#message-converters。它的名称来自. 这是在. 这确实是您可以挂钩的非常早的地方。而且您实际上仍然有一个原始对象,没有任何转换,并且具有所有可用的标头和属性。AbstractRabbitListenerContainerFactoryMessageConverterfromMessage()MessagingMessageListenerAdapter.toMessagingMessage()MessagingMessageListenerAdapter.onMessage()org.springframework.amqp.core.Message
好吧,你还可以注入:
/**
* @param afterReceivePostProcessors the post processors.
* @see AbstractMessageListenerContainer#setAfterReceivePostProcessors(MessagePostProcessor...)
*/
public void setAfterReceivePostProcessors(MessagePostProcessor... afterReceivePostProcessors) {
Run Code Online (Sandbox Code Playgroud)
出于类似的原因,您提出了要求。