当前位置: 首页 > news >正文

网站地图用法小米的推广软文

网站地图用法,小米的推广软文,公司想做个自己的网站怎么做,广安发展建设集团公司网站在Spring Boot中,RabbitMQ的两种监听器容器(SimpleMessageListenerContainer和DirectMessageListenerContainer)在实现机制和使用场景上有显著差异。以下是它们的核心区别、配置方式及最佳实践: Simple类型 Direct类型 一、核心…

在Spring Boot中,RabbitMQ的两种监听器容器(SimpleMessageListenerContainerDirectMessageListenerContainer)在实现机制和使用场景上有显著差异。以下是它们的核心区别、配置方式及最佳实践:


在这里插入图片描述
Simple类型
在这里插入图片描述
Direct类型
在这里插入图片描述

一、核心区别

特性SimpleMessageListenerContainerDirectMessageListenerContainer
线程模型单线程管理所有消费者(线程池复用)每个消费者独立线程(更轻量级)
并发控制动态调整消费者线程池concurrentConsumers固定每个队列的消费者数量(consumersPerQueue
消息预取(Prefetch)高预取可能导致消息堆积低预取(默认1)更公平的消息分配
资源消耗高(长连接、线程池)低(按需创建线程)
适用场景长耗时任务、需动态扩缩容消费者、负载均衡场景高吞吐、低延迟、短任务 ;固定消费者数量、严格顺序处理场景
版本支持旧版默认(Spring AMQP 1.x)新版默认(Spring Boot 2.0+)

二、Spring Boot配置示例

1. 全局配置(application.yml)
spring:rabbitmq:listener:type: direct  # 可选 simple 或 directsimple:concurrency: 5  # 初始消费者数max-concurrency: 10  # 最大动态扩展数prefetch: 50  # 每次预取消息数type: directdirect:consumersPerQueue: 1          # 保持默认,确保顺序性missingQueuesFatal: true      # 生产环境建议开启,避免消息丢失acknowledge-mode: manual      # 推荐手动确认模式(更可控)retry:enabled: truemax-attempts: 3             # 总尝试次数 = 初始消费 + 2次重试initial-interval: 2000ms    # 首次重试间隔multiplier: 2               # 指数退避策略max-interval: 10000ms       # 最大间隔保护stateless: false            # 必须设为 false(确保事务性操作)重试过程示范
假设一个订单处理场景,消息内容为 {"orderId": 1001}:
首次消费尝试
消费者线程开始处理消息。
若业务逻辑抛出异常(如数据库连接失败),触发重试机制。
消息进入 retry 状态,等待 2秒。第二次重试
间隔时间 = initial-interval * multiplier = 2s * 2 = 4s。
若仍失败,继续等待 4秒。第三次重试
间隔时间 = 4s * 2 = 8s
(但不超过 max-interval 的 10s,即再有下一次,那么4s * 3 = 12s,超过了最大间隔10s,仍按最大间隔10s执行)。
最终失败后,根据配置执行以下操作之一:
手动确认模式:调用 basicNack(requeue=false),消息进入死信队列。
自动确认模式:抛出 AmqpRejectAndDontRequeueException 拒绝消息。监控与告警建议
监控指标:
重试次数 (rabbitmq_listener_retry_count)
死信队列堆积量 (rabbitmq_queue_messages_dlx)日志记录:
使用 MDC 记录消息 ID 和重试次数。
在最后一次重试失败时发送告警通知(如钉钉、Slack)。
2. 注解式监听器
@RabbitListener(queues = "myQueue", containerFactory = "simpleContainerFactory")
public void handleMessage(String payload) {// 业务逻辑
}
3. 自定义容器工厂
@Configuration
public class RabbitConfig {// Simple 容器工厂@Bean(name = "simpleContainerFactory")public SimpleRabbitListenerContainerFactory simpleFactory(ConnectionFactory connectionFactory) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setConcurrentConsumers(5);factory.setMaxConcurrentConsumers(10);factory.setPrefetchCount(50);return factory;}// Direct 容器工厂@Bean(name = "directContainerFactory")public DirectRabbitListenerContainerFactory directFactory(ConnectionFactory connectionFactory) {DirectRabbitListenerContainerFactory factory = new DirectRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setConsumersPerQueue(2);factory.setPrefetchCount(1);return factory;}
}

三、使用场景与最佳实践

1. 选择 Simple 容器的场景
  • 长耗时任务:如生成PDF报表、视频转码,需控制并发避免资源耗尽。
  • 复杂错误处理:需自定义重试策略(如RetryTemplate)和死信队列(DLQ)配置。
  • 动态负载均衡:通过调整concurrencymax-concurrency,自动扩展消费者线程应对流量高峰。
  • 高吞吐场景:结合prefetch批量拉取消息,减少网络开销(例如日志处理、批量任务)。
2. 选择 Direct 容器的场景
  • 高吞吐低延迟:如订单创建、秒杀系统,要求快速响应。
  • 资源敏感型应用:容器轻量,适合云环境或容器化部署(如K8s)。
  • 公平消息分发:低预取(prefetch=1)确保消息均匀分配给消费者。
  • 固定资源分配:需严格控制每个队列的消费者数量(如支付回调等关键业务)。
  • 顺序性要求:单个队列绑定固定消费者,保证消息顺序处理(如库存扣减)。
  • 精细化重试控制:通过retry配置实现自定义重试逻辑(如短信发送失败重试)。
3. 最佳实践
  1. 根据业务选择类型

    • 若需弹性伸缩,选择Simple监听器
    • 若需资源隔离或顺序保证,选择Direct监听器
  2. 预取值(Prefetch)调优

    • 高吞吐场景:增大prefetch减少网络交互(但可能增加内存压力)。
    • 低延迟场景:减小prefetch以快速响应新消息。
  3. 消息确认与重试

    • 使用manual确认模式,并在异常时调用channel.basicNack()触发重试或死信队列。
  4. 错误处理

    • 始终配置Dead Letter Exchange(DLX)和重试机制。
  5. 监控与线程管理

    • 监控消费者线程状态,避免Simple模式下线程数过高导致资源耗尽。
    • Direct模式下需评估队列数量与消费者配比,避免队列闲置。
    • 通过RabbitMQ Management控制台监控队列堆积情况,调整prefetch和并发数。
  6. 版本适配

    • Spring Boot 2.x+默认使用Direct,如需切换回Simple需显式配置。

四、常见问题

Q1: 消息堆积时如何选择容器?
  • 若消息处理快,用Direct并增加consumers-per-queue
  • 若处理慢,用Simple并逐步提升max-concurrency,同时优化业务逻辑。
Q2: 如何避免消息重复消费?
  • 确保业务逻辑幂等(如数据库唯一约束)。
  • 启用手动确认模式(acknowledge-mode: manual),在业务完成后手动ACK。
Q3: Direct容器为何有时效率低?
  • 检查prefetch是否过小(如默认1),适当增加以平衡吞吐和公平性。

listener的类型,其中simple和direct有不同的配置参数。比如,simple监听器可以设置并发消费者数量(concurrency和max-concurrency),而direct监听器则设置每个队列的消费者数量(consumers-per-queue)。这说明两者的并发处理方式不同,simple可能更适合动态调整消费者数量,而direct则固定每个队列的消费者数量。

单模式适合负载均衡,通过多个消费者处理同一队列的消息,而direct监听器可能更适合需要严格顺序或固定消费者的场景。

simple监听器提供更多的动态并发配置,适合需要横向扩展消费者的场景,而direct监听器则提供更固定的消费者数量配置,适合需要精确控制的场景。配置时需要注意各自的参数,如并发数、预取值、确认模式等。

通过合理选择容器类型和调优参数,可以显著提升RabbitMQ在Spring Boot中的性能和可靠性。建议结合压力测试和实际业务场景进行验证。

http://www.wangmingla.cn/news/69701.html

相关文章:

  • 如何查询网站的建站工具seo学院
  • 有什么网站可以兼职做翻译铜川网络推广
  • 做瞹瞹瞹视频网站搜索引擎营销总结
  • 马鞍山做公司网站的宁波网站建设的公司
  • java入门网站百度seo排名360
  • 做产品类网站有哪些苏州优化收费
  • 沈阳免费做网站腾讯域名注册官网
  • 做网站的图片房产营销网站大全
  • 专门做dnf补丁的网站西安seo网站推广优化
  • web做网站作业网站建设排名优化
  • 做的好看的旅游网站互联网运营推广是做什么的
  • wordpress网站优化互联网运营
  • 恩施做网站宁波网站建设
  • 吉安网站制作公司成都网站seo推广
  • 电商网站前端模板下载seo云优化平台
  • 做游戏视频网站要批证吗建设企业营销型网站
  • 网站建设策划书范文六篇精选今日新闻头条新闻摘抄
  • 网络营销推广怎么做百度seo快速提升排名
  • 行业网站建设哪家好百度竞价排名服务
  • 网站免费正能量软件下载企业网站建设目标
  • seo优化排名经验优化排名
  • 安徽基层党组织建设网站东莞网站公司
  • 如何建设与维护网站电商运营公司排名
  • 做网站如何赢利的电商项目策划书
  • 关于网站设计的书籍淘宝的前100个关键词排名
  • 有域名后怎样做网站竞价排名规则
  • 网站自定义title营销型网站设计制作
  • 网站改版是什么查询网址域名ip地址
  • 鞍山百度网站怎么制作手机优化大师官网
  • vr软件开发前景网站seo视频狼雨seo教程