RabbitMQ笔记十三:使用@RabbitListener注解消费消息

RabbitMQ笔记十三:使用@RabbitListener注解消费消息
最新回答
许仙没带伞

2026-06-12 01:53:44

之前的博客中我们可以在spring容器中构建 SimpleMessageListenerContainer 来消费消息,我们也可以使用 @RabbitListener 来消费消息。

定义消息处理器, @RabbitListener 注解标记的方法

应用启动类, @EnableRabbit 启用 @RabbitListener

测试:

控制台打印:

如果发送的消息 content_type 的属性是 text ,那么接收的消息处理方法的参数就必须是 String 类型,如果是 byte[] 类型就会报错。

控制台报错

总结
如果消息属性中没有指定 content_type ,则接收消息的处理方法接收类型是 byte[] ,如果消息属性中指定 content_type为text ,则接收消息的处理方法的参数类型是 String 类型。不管有没有指定 content_type ,处理消息方法的参数类型是Message都不会报错。

步骤

具体的消息处理方法的参数是跟 MessageConverter 转换后的java对象有关。
如果想要设置 MessageConverte r,则需要在 RabbitListenerContainerFactory 的实例中去设置,( setMessageConverter 方法)

获取单一个Header的属性,Header还有其他的一些属性,比如 required , defaultvalue 等属性,顾名思义:

配置文件:

启动类:

定义mq中不存在的 Queue , exchange 和 route key

从上面的我们知道声明必须容器中要有 RabbitAdmin 和 RabbitTemplate 实例

应用启动类

测试验证

控制台打印:

说明自动声明的绑定中的队列被自动默认监听。 @RabbitListener 注解中的 bindings 和 queues 参数不能同时指定,否则会报错。

@RabbitListener 可以标注在类上面,当使用在类上面的时候,需要配合 @RabbitHandler 注解一起使用, @RabbitListener 标注在类上面表示当有收到消息的时候,就交给带有 @RabbitHandler 的方法处理,具体找哪个方法处理,需要跟进 MessageConverter 转换后的java对象。
配置:

处理器方法

应用启动类:

发送不包含content_type属性的消息和content_type属性为text的消息,控制台打印:

@RabbitListener 注解的 containerFactory 属性可以指定一个 RabbitListenerContainerFactory 的bean,默认是找名字为 rabbitListenerContainerFactory 的实例。

当我们将 ConsumerConfig 类中的 RabbitListenerContainerFactory 实例的对象名改掉的时候,发现就会报错。

此时控制台上报错,

此时如果配置一下 @RabbitListener 注解的 containerFactory 属性便不会报错。

我们再去改造一下在 RabbitListenerContainerFactory 实例中定义消息类型转换器

User对象:

在处理器中增加参数是User的方法:

您可能感兴趣问答