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

想接网站自己做百度上海分公司

想接网站自己做,百度上海分公司,如何使用服务器ip做网站,如何推广运营网站要确保 RabbitMQ 在消费者(Python 服务)重启或挂掉时消息不丢失,需结合 消息持久化、确认机制(ACK) 和 死信队列(DLX) 实现高可靠性: 1. 消息持久化(Durability&#xff…

要确保 RabbitMQ 在消费者(Python 服务)重启或挂掉时消息不丢失,需结合 消息持久化确认机制(ACK)死信队列(DLX) 实现高可靠性:


1. 消息持久化(Durability)

确保消息和队列在 RabbitMQ 服务重启后仍存在:

Java 发布者(设置持久化)
// 创建持久化队列 + 持久化消息
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {// 声明持久化队列(durable=true)channel.queueDeclare("image_queue", true, false, false, null);// 发布持久化消息(deliveryMode=2)String message = "{\"task_id\": \"123\"}";channel.basicPublish("", "image_queue", new AMQP.BasicProperties.Builder().deliveryMode(2) // 持久化消息.build(),message.getBytes());System.out.println("消息已持久化发送");
}
Python 消费者(声明持久化队列)
channel.queue_declare(queue='image_queue', durable=True)  # durable=True

2. 手动确认(Manual ACK)

消费者处理完消息后显式发送 ACK,避免消息因崩溃丢失:

Python 消费者(关闭自动 ACK)
def callback(ch, method, properties, body):try:print(f"处理消息: {body.decode()}")# 业务逻辑...ch.basic_ack(delivery_tag=method.delivery_tag)  # 手动确认except Exception as e:print(f"处理失败: {e}")ch.basic_nack(delivery_tag=method.delivery_tag, requeue=True)  # 重新入队channel.basic_consume(queue='image_queue', on_message_callback=callback, auto_ack=False)  # 关闭自动ACK

关键点

  • auto_ack=False:必须关闭自动确认。
  • 处理成功后调用 basic_ack,失败时 basic_nack 并重新入队。

3. 死信队列(DLX)

处理因消费者崩溃或消息超时未被确认的消息:

Java 发布者(声明死信交换机和队列)
// 定义死信交换机和队列
Map<String, Object> args = new HashMap<>();
args.put("x-dead-letter-exchange", "dlx_exchange");  // 死信交换机
args.put("x-message-ttl", 60000);  // 消息存活时间(可选)channel.queueDeclare("image_queue", true, false, false, args);
channel.exchangeDeclare("dlx_exchange", "direct");
channel.queueDeclare("dlx_queue", true, false, false, null);
channel.queueBind("dlx_queue", "dlx_exchange", "");
Python 消费者(监听死信队列)
channel.queue_declare(queue='dlx_queue', durable=True)
channel.basic_consume(queue='dlx_queue', on_message_callback=handle_dlx_message, auto_ack=False)

作用

  • 消息超过 TTL 或消费者拒绝时,自动路由到死信队列。
  • 可对死信消息进行补偿处理(如重试或记录日志)。

4. 消费者高可用(HA)

确保消费者服务崩溃后能自动恢复:

方案 1:进程守护(如 systemd)
# /etc/systemd/system/python_consumer.service
[Unit]
Description=Python RabbitMQ Consumer
After=network.target[Service]
User=root
WorkingDirectory=/opt/app
ExecStart=/usr/bin/python3 /opt/app/consumer.py
Restart=always  # 崩溃后自动重启[Install]
WantedBy=multi-user.target
方案 2:容器化(Docker)
# Dockerfile
FROM python:3.9
COPY consumer.py /app/
CMD ["python", "/app/consumer.py"]
docker run -d --restart=unless-stopped my_consumer

5. 消息补偿机制(可选)

极端情况下(如 RabbitMQ 崩溃),可通过数据库记录消息状态:

Java 发布者(本地事务)
// 伪代码:本地事务
try {saveToDatabase(task);  // 1. 先存数据库sendToRabbitMQ(task); // 2. 再发消息commitTransaction();
} catch (Exception e) {rollbackTransaction();// 定时任务扫描数据库补偿发送
}

完整流程图

Java Publisher RabbitMQ Python Consumer DLX 发布持久化消息 (deliveryMode=2) 推送消息 (auto_ack=false) basic_ack() basic_nack(requeue=true) 重新投递 alt [处理成功] [处理失败或崩溃] 转入死信队列 触发补偿逻辑 alt [消息超时或多次失败] Java Publisher RabbitMQ Python Consumer DLX

最佳实践总结

措施实现方式作用
消息持久化deliveryMode=2 + queueDeclare(durable=true)防止 RabbitMQ 重启丢失消息
手动 ACKauto_ack=false + basic_ack()/basic_nack()确保消息处理完成才删除
死信队列(DLX)x-dead-letter-exchange + 独立死信消费者处理超时或失败消息
消费者高可用systemd Restart=alwaysdocker --restart=unless-stopped消费者崩溃后自动恢复
消息补偿数据库记录 + 定时任务扫描极端情况下的兜底措施

通过以上组合方案,可确保消息在消费者崩溃、重启或 RabbitMQ 异常时不丢失、不重复、可恢复

http://www.dtcms.com/wzjs/290792.html

相关文章:

  • 网站平台建设调研报告aso优化什么意思是
  • 做网站需要什么人浙江企业seo推广
  • 阿里云服务器做网站网站建设策划书范文
  • 大连百度推广代理商新手做seo怎么做
  • 网站登录窗口怎么做软文写作公司
  • 汕头网站建设系统百度广告投放
  • css+div网站模板ip域名查询网
  • app开发公司推荐安徽创逸科技有限公司关键词优化需要从哪些方面开展
  • 建网站盈利的几种方式投放广告
  • wordpress有哪些好模版长沙网站优化培训
  • 90设计网站是不是没有视频模板注册推广赚钱一个40元
  • 青岛队建网站域名查询138ip
  • wordpress仿站教程+vipsem优化
  • 什么是网站规划专业seo站长工具全面查询网站
  • 做网站只开发手机端可不可以产品推广计划方案
  • 杭州高端网站建设到蓝韵网络百度导航2023年最新版
  • 做招标网站 如何网络推广营销软件
  • 网站开发公司人员配备百度seo优化排名
  • 欧美模板网站建设网上广告怎么推广
  • 网站站点建设分为时事新闻热点
  • 个人网站 商业北京官方seo搜索引擎优化推荐
  • 服装印花图案网站海外市场推广方案
  • 怎样进行网站后台管理怎么优化标题和关键词排名
  • 哪个网站做批韩国护肤品批发朋友圈广告30元 1000次
  • 内部网站建设要求深圳产品网络推广
  • 做网站的基本功网站seo批量查询工具
  • 广西建设领域证书查询官方网站sem扫描电子显微镜
  • 网站建设营销型广告投放平台公司
  • 门户网站建设报告哦上海网络推广优化公司
  • 网站制作前期所需要准备seo工作室