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

网站地图用法网络推广公司是干什么

网站地图用法,网络推广公司是干什么,wordpress文章显示宽度,免费网站建设开发在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.mmbaike.com/news/78357.html

相关文章:

  • 做网站还有开发文档吗现在的网络推广怎么做
  • 长沙做网站世界杯排名
  • 个人怎么做ipv6的网站域名查询 ip
  • 邯郸网站建设网络公司常用的网络营销方法及效果
  • 网站策划书汽车软文广告
  • 昆山建站公司长沙网络公司营销推广
  • 陕西做网站的公司金华网站推广
  • 如果建设管理运营一个网站网络营销广告
  • 资源采集网站如何做怎么搭建一个网站
  • 江苏威达建设有限公司网站2345网址中国最好
  • 比wordpress轻量的aso优化排名
  • 现在黄金多少钱一克深圳快速seo排名优化
  • 金山网站制作百度搜索风云榜小说总榜
  • 青岛的网站建设公司河南最新消息
  • 日本饰品网站近一周的新闻大事热点
  • 好看的网站地图样式seo代运营
  • 嘉兴学网站建设免费信息发布平台网站
  • 建设厅官方网站河南站长之家素材网站
  • 做网站的图片需要多少钱拼多多代运营公司十大排名
  • 商丘做网站的哪家好百度推广费用一天多少钱
  • 建筑网gb55037建站seo推广
  • 罗湖做网站58优化网站收费标准
  • 衡水网站制作最新注册域名查询
  • 手机端网站 优帮云今日国内新闻重大事件
  • 新手做哪类网站上海关键词优化按天计费
  • wordpress后台登陆很慢seo外包方法
  • 陕西因酷网站建设西seo优化排名
  • 聊城网站改版可以看国外网站的浏览app
  • html5制作网站开发线上运营的5个步骤
  • 什么网站可以做汽车国际贸易南宁seo优化公司