前言:
@RabbitListener 注解是 Spring AMQP 提供的注解,用于简化 RabbitMQ 消息监听器的创建,我们在方法上添加 @RabbitListener 注解,就可以将方法注册为消息监听器,监听 RabbitMQ 的消息,本篇我们来分析一下 @RabbitListener 注解的使用详解。
RabbitMQ 系列文章传送门
@RabbitListener 的简单使用
我们在 directConsumer 方法上加了一个 @RabbitListener 注解,并在注解中标注了队列名 direct-buget-queue,这样我们就可以监听消费队列 direct-buget-queue 中的消息了。
@Component
public class MyRabbitConsumer {
//direct 直连模式消费端
@RabbitListener(queues = "direct-buget-queue")
public void directConsumer(String message) {
System.out.println("direct 消息消费成功,message内容为:" + message);
}
}
@RabbitListener 注解满足同时监听多个队列的消息,如下:
@Component
public class MyRabbitConsumer {
//direct 直连模式消费端
@RabbitListener(queues = {"direct-buget-queue", "direct-buget-queue2"})
public void directConsumer(String message) {
System.out.println("direct 消息消费成功,message内容为:" + message);
}
}
@RabbitListener 的复杂使用
使用 @RabbitListener 绑定交换器、路由、队列,设置手动提交和监听容器的名称,代码如下:
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "topic-buget-queue", durable = "true"),
exchange = @Exchange(value = "topicExchange", type = ExchangeTypes.TOPIC),
key = "topicRoutingKey"), ackMode = "MANUAL", containerFactory = "topicContainerFactory"
)
public void topicConsumer(String message) {
System.out.println("topic topic-buget-queue 消息消费成功,message内容为:" + message);
}
@RabbitListener 注解的各个属性详解
了解了 @RabbitListener 注解的各个属性含义,可以根据我们需求灵活进行配置,属性含义解释如下:
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@MessageMapping
@Documented
//可重复
@Repeatable(RabbitListeners.class)
public @interface RabbitListener {
//id 为监听指定一个唯一标志
String id() default "";
//监听容器
String containerFactory() default "";
//要监听的队列名称
String[] queues() default {};
//监听队列的的详细信息 包括队列名称 是否持久化
Queue[] queuesToDeclare() default {};
//是否是独占模式
boolean exclusive() default false;
//指定监听容器的消费者线程的优先级
String priority() default "";
//指定RabbitAdmin bean 的名称 用于声明式的队列绑定等操作
String admin() default "";
//用户声明队列和交换机的绑定关系
QueueBinding[] bindings() default {};
//监听容器组的名称
String group() default "";
//指定发生异常的时的返回策略
String returnExceptions() default "";
//指定处理异常的异常处理器
String errorHandler() default "";
//指定并发消费的线程数
String concurrency() default "";
//指定监听是否在容器启动时候启动
String autoStartup() default "";
//指定执行监听方法的 线程池 executor
String executor() default "";
//指定消息确认模式
String ackMode() default "";
//指定发送回复消息的 Processor
String replyPostProcessor() default "";
//指定用于消息转换的 MessageConverter
String messageConverter() default "";
//指定回复消息的内容类型
String replyContentType() default "";
//指定是否使用转换器定义内容类型
String converterWinsContentType() default "true";
}
如有错误的地方欢迎指出纠正。