@RabbitListener常用总结

@RabbitListener 是 Spring AMQP 提供的注解,用于简化 RabbitMQ 消息监听器的创建。通过在方法上添加 @RabbitListener 注解,可以将方法注册为消息监听器,用于处理从 RabbitMQ 中接收到的消息。

以下是 @RabbitListener 的使用详解:

1. 基本用法:

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MyListener {

    @RabbitListener(queues = "myQueue")
    public void handleMessage(String message) {
        // 处理接收到的消息
        System.out.println("Received message: " + message);
    }
}

上面的例子中,handleMessage 方法被 @RabbitListener 注解标记,表示它是一个 RabbitMQ 消息监听器,用于监听名为 "myQueue" 的队列。

2. 多个队列监听:

@RabbitListener(queues = {"queue1", "queue2"})
public void handleMessage(String message) {
    // 处理接收到的消息
    System.out.println("Received message: " + message);
}

通过在 queues 属性中指定多个队列,可以监听多个队列。

3. 动态队列名:

//此处使用了spl表达式进行解析实现动态队列名
@RabbitListener(queues = "#{dynamicQueue.name}")
public void handleMessage(String message) {
    // 处理接收到的消息
    System.out.println("Received message: " + message);
}

=============================================================
import org.springframework.stereotype.Component;

@Component
public class DynamicQueue {

    private String name = "myDynamicQueue"; // 初始队列名

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

queues 属性中可以使用 SpEL 表达式动态指定队列的名称。

4. 监听指定交换机和路由键:

@RabbitListener(bindings = @QueueBinding(
        value = @Queue(value = "myQueue", durable = "true"),
        exchange = @Exchange(value = "myExchange", type = ExchangeTypes.TOPIC),
        key = "myRoutingKey")
)
public void handleMessage(String message) {
    // 处理接收到的消息
    System.out.println("Received message: " + message);
}

通过 bindings 属性可以指定队列、交换机和路由键的绑定关系。

5. 指定容器工厂:

@RabbitListener(containerFactory = "myContainerFactory", queues = "myQueue")
public void handleMessage(String message) {
    // 处理接收到的消息
    System.out.println("Received message: " + message);
}

通过 containerFactory 属性指定使用的 RabbitListenerContainerFactory

6. 确认模式:

@RabbitListener(queues = "myQueue", ackMode = "MANUAL")
public void handleMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
    // 处理接收到的消息
    System.out.println("Received message: " + message);

    // 手动确认消息
    channel.basicAck(tag, false);
}

通过设置 ackMode 为 "MANUAL",可以手动确认消息。

7.注解配置项使用解释及示例

这些是 @RabbitListener 注解的配置项,以下是每个配置项的解释以及使用示例:

  1. id:

    • 说明:用于为监听容器指定一个唯一的标识符。
    • 示例:id = "myListener"
  2. containerFactory:

    • 说明:指定要使用的 RabbitListenerContainerFactory 的 bean 名称,用于创建监听容器。
    • 示例:containerFactory = "myContainerFactory"
  3. queues:

    • 说明:指定要监听的队列的名称,可以指定多个队列。
    • 示例:queues = {"queue1", "queue2"}
  4. queuesToDeclare:

    • 说明:用于声明监听的队列的详细信息,包括队列的名称、是否持久化等。
    • 示例:queuesToDeclare = @Queue(name = "myQueue", durable = "true")
  5. exclusive:

    • 说明:指定是否使用独占模式。
    • 示例:exclusive = true
  6. priority:

    • 说明:指定监听容器的消费者线程的优先级。
    • 示例:priority = "high"
  7. admin:

    • 说明:指定 RabbitAdmin 的 bean 名称,用于进行声明式的队列绑定等操作。
    1. 示例:admin = "myRabbitAdmin"
  8. bindings:

    • 说明:用于声明队列和交换机的绑定关系。
    • 示例:bindings = {@QueueBinding(value = @Queue(name = "myQueue"), exchange = @Exchange(name = "myExchange"))}
  9. group:

    • 说明:用于指定监听容器的组名称。
    • 示例:group = "myGroup"
  10. returnExceptions:

  • 说明:指定发生异常时的返回策略。
  • 示例:returnExceptions = "java.lang.Exception"
  1. errorHandler:
  • 说明:指定用于处理消息监听异常的错误处理器。
  • 示例:errorHandler = "myErrorHandler"
  1. concurrency:
  • 说明:指定消息监听的并发消费者数量。
  • 示例:concurrency = "3-5"
  1. autoStartup:
  • 说明:指定监听容器是否在启动时自动启动。
  • 示例:autoStartup = "false"
  1. executor:
  • 说明:指定用于执行监听器方法的 TaskExecutor 的 bean 名称。
  • 示例:executor = "myTaskExecutor"
  1. ackMode:
  • 说明:指定消息确认模式。
  • 示例:ackMode = "MANUAL"
  1. replyPostProcessor:
  • 说明:指定用于处理发送回复消息的 MessagePostProcessor 的 bean 名称。
  • 示例:replyPostProcessor = "myReplyPostProcessor"
  1. messageConverter:
  • 说明:指定用于消息转换的 MessageConverter 的 bean 名称。
  • 示例:messageConverter = "myMessageConverter"
  1. replyContentType:
  • 说明:指定回复消息的内容类型。
  • 示例:replyContentType = "application/json"
  1. converterWinsContentType:
  • 说明:指定是否使用转换器定义的内容类型。
  • 示例:converterWinsContentType = "false"

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
00、尚硅谷_SpringBoot_源码、课件 1、尚硅谷-SpringBoot高级-缓存-JSR107简介 2、尚硅谷-SpringBoot高级-缓存-Spring缓存抽象简介 3、尚硅谷-SpringBoot高级-缓存-基本环境搭建 4、尚硅谷-SpringBoot高级-缓存-@Cacheable初体验 5、尚硅谷-SpringBoot高级-缓存-缓存工作原理&@Cacheable运行流程 6、尚硅谷-SpringBoot高级-缓存-@Cacheable其他属性 7、尚硅谷-SpringBoot高级-缓存-@CachePut 8、尚硅谷-SpringBoot高级-缓存-@CacheEvict 9、尚硅谷-SpringBoot高级-缓存-@Caching&@CacheConfig 10、尚硅谷-SpringBoot高级-缓存-搭建redis环境&测试 11、尚硅谷-SpringBoot高级-缓存-RedisTemplate&序列化机制 12、尚硅谷-SpringBoot高级-缓存-自定义CacheManager 13、尚硅谷-SpringBoot高级-消息-JMS&AMQP;简介 14、尚硅谷-SpringBoot高级-消息-RabbitMQ基本概念简介 15、尚硅谷-SpringBoot高级-消息-RabbitMQ运行机制 16、尚硅谷-SpringBoot高级-消息-RabbitMQ安装测试 17、尚硅谷-SpringBoot高级-消息-RabbitTemplate发送接受消息&序列化机制 18、尚硅谷-SpringBoot高级-消息-@RabbitListener&@EnableRabbit 19、尚硅谷-SpringBoot高级-消息-AmqpAdmin管理组件的使用 20、尚硅谷-SpringBoot高级-检索-Elasticsearch简介&安装 21、尚硅谷-SpringBoot高级-检索-Elasticsearch快速入门 22、尚硅谷-SpringBoot高级-检索-SpringBoot整合Jest操作ES 23、尚硅谷-SpringBoot高级-检索-整合SpringDataElasticsearch 24、尚硅谷-SpringBoot高级-任务-异步任务 25、尚硅谷-SpringBoot高级-任务-定时任务 26、尚硅谷-SpringBoot高级-任务-邮件任务 27、尚硅谷-SpringBoot高级-安全-测试环境搭建 28、尚硅谷-SpringBoot高级-安全-登录&认证&授权 29、尚硅谷-SpringBoot高级-安全-权限控制&注销 30、尚硅谷-SpringBoot高级-安全-记住我&定制登陆页 31、尚硅谷-SpringBoot高级-分布式-dubbo简介 32、尚硅谷-SpringBoot高级-分布式-docker安装zookeeper 33、尚硅谷-SpringBoot高级-分布式-SpringBoot、Dubbo、Zookeeper整合 34、尚硅谷-SpringBoot高级-分布式-SpringCloud-Eureka注册中心 35、尚硅谷-SpringBoot高级-分布式-服务注册 36、尚硅谷-SpringBoot高级-分布式-服务发现&消费 37、尚硅谷-SpringBoot高级-热部署-devtools开发热部署 38、尚硅谷-SpringBoot高级-监管-监管端点测试 39、尚硅谷-SpringBoot高级-监管-定制端点 40、尚硅谷-SpringBoot高级-监管-自定义HealthIndicator

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值