前言:
@RabbitListener 注解是 Spring AMQP 提供的注解,用于简化 RabbitMQ 消息监听器的创建,我们在方法上添加 @RabbitListener 注解,就可以将方法注册为消息监听器,监听 RabbitMQ 的消息,本篇我们来分析一下 @RabbitListener 注解的使用详解。
@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 "";//指定执行监听方法的 线程池 executorString executor() default "";//指定消息确认模式 String ackMode() default "";//指定发送回复消息的 ProcessorString replyPostProcessor() default "";//指定用于消息转换的 MessageConverter String messageConverter() default "";//指定回复消息的内容类型String replyContentType() default "";//指定是否使用转换器定义内容类型String converterWinsContentType() default "true";
}
如有错误的地方欢迎指出纠正。