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

微网站建设招聘做招聘网站代理商需要多少钱

微网站建设招聘,做招聘网站代理商需要多少钱,专业网站制作公司地址,如何在电脑安装wordpress文章目录什么是消息可靠性?RabbitMQ消息可靠性的三个维度1. 生产者到Exchange的可靠性2. Exchange到Queue的可靠性3. Queue到消费者的可靠性核心机制详解Publisher Confirm机制消息持久化Mandatory参数消费者确认机制(ACK)最佳实践建议1. 合理…

文章目录

  • 什么是消息可靠性?
  • RabbitMQ消息可靠性的三个维度
    • 1. 生产者到Exchange的可靠性
    • 2. Exchange到Queue的可靠性
    • 3. Queue到消费者的可靠性
  • 核心机制详解
    • Publisher Confirm机制
    • 消息持久化
    • Mandatory参数
    • 消费者确认机制(ACK)
  • 最佳实践建议
    • 1. 合理选择确认机制
    • 2. 设置合适的超时时间
    • 3. 实现重试机制
    • 4. 监控和日志
  • 总结

在分布式系统中,消息队列扮演着至关重要的角色。作为业界流行的消息中间件,RabbitMQ不仅提供了高性能的消息传递能力,更重要的是它提供了多层次的消息可靠性保障机制。本文将深入探讨RabbitMQ是如何确保消息在复杂的分布式环境中安全、可靠地传递的。

什么是消息可靠性?

消息可靠性是指在消息从生产者发送到消费者接收的整个过程中,确保消息不会丢失、重复或损坏。在实际的生产环境中,网络故障、服务器宕机、应用程序异常等各种因素都可能导致消息丢失,因此消息可靠性是消息队列系统必须解决的核心问题。

RabbitMQ消息可靠性的三个维度

RabbitMQ的消息可靠性保障可以从三个维度来理解:

1. 生产者到Exchange的可靠性

这个阶段确保消息能够成功从生产者发送到RabbitMQ的Exchange。

2. Exchange到Queue的可靠性

这个阶段确保消息能够正确地从Exchange路由到目标Queue。

3. Queue到消费者的可靠性

这个阶段确保消息能够安全地从Queue传递到消费者并得到正确处理。

核心机制详解

Publisher Confirm机制

Publisher Confirm是RabbitMQ提供的一种确认机制,用于保障生产者到Exchange的消息可靠性。

工作原理:

  • 生产者将信道设置为confirm模式
  • 发送消息后,RabbitMQ会返回确认信息
  • 如果消息成功到达Exchange,返回ACK
  • 如果消息未能到达Exchange,返回NACK

消息持久化

消息持久化是防止RabbitMQ服务器重启导致消息丢失的重要机制。

三层持久化:

  1. Exchange持久化
// 声明持久化Exchange
channel.exchangeDeclare("my.exchange", "direct", true);
  1. Queue持久化
// 声明持久化Queue
channel.queueDeclare("my.queue", true, false, false, null);
  1. 消息持久化
// 发送持久化消息
AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().deliveryMode(2) // 2表示持久化.build();
channel.basicPublish("exchange", "routingKey", props, message.getBytes());

Mandatory参数

Mandatory参数用于处理消息无法路由到Queue的情况。

// 设置Return监听器
channel.addReturnListener(new ReturnListener() {@Overridepublic void handleReturn(int replyCode, String replyText, String exchange, String routingKey, AMQP.BasicProperties properties, byte[] body) {System.out.println("消息无法路由:" + new String(body));// 处理无法路由的消息}
});// 发送消息时设置mandatory为true
channel.basicPublish("exchange", "wrongRoutingKey", true, null, message.getBytes());

消费者确认机制(ACK)

消费者确认机制确保消息被正确处理后才从Queue中删除。

手动确认模式:

// 关闭自动确认
boolean autoAck = false;DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), "UTF-8");try {// 处理消息processMessage(message);// 手动确认channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);} catch (Exception e) {// 处理失败,拒绝消息并重新入队channel.basicNack(delivery.getEnvelope().getDeliveryTag(), false, true);}
};channel.basicConsume("my.queue", autoAck, deliverCallback, consumerTag -> {});

最佳实践建议

1. 合理选择确认机制

  • 对于高吞吐量场景,使用异步Publisher Confirm
  • 对于严格一致性要求,使用事务机制
  • 消费端总是使用手动确认

2. 设置合适的超时时间

// 设置连接超时
factory.setConnectionTimeout(30000);// 设置确认超时
channel.waitForConfirms(5000);

3. 实现重试机制

public void sendWithRetry(String message, int maxRetries) {int retries = 0;while (retries < maxRetries) {try {channel.basicPublish("exchange", "routingKey", null, message.getBytes());if (channel.waitForConfirms(1000)) {return; // 发送成功}} catch (Exception e) {retries++;if (retries >= maxRetries) {throw new RuntimeException("消息发送失败", e);}// 等待后重试Thread.sleep(1000 * retries);}}
}

4. 监控和日志

  • 监控队列长度和消费速率
  • 记录确认失败的消息
  • 设置告警机制

总结

RabbitMQ通过Publisher Confirm、消息持久化、事务机制、Mandatory参数、消费者确认等多种机制,为消息传递提供了全方位的可靠性保障。在实际应用中,我们需要根据业务特点合理选择和组合这些机制,在确保消息可靠性的同时保持系统的高性能。、

消息可靠性不是一个简单的开关,而是一个需要综合考虑的系统工程。通过深入理解RabbitMQ的各种机制,并结合实际业务场景进行合理配置,我们就能构建出既可靠又高效的消息系统。

http://www.dtcms.com/a/516437.html

相关文章:

  • Android 网络变动监听
  • Deep Metric Learning(深度度量学习)
  • 消息队列RabbitMQ、Kafka、ActiveMQ 、Redis、 ZeroMQ、Apache Pulsar对比和如何使用
  • 建网站专用网站标准物质网站建设模板
  • (四)Flutter插件之IOS插件开发
  • 湘潭网站建设 x磐石网络广州网站建设培训学校
  • 织梦做的网站老是被黑国外做美食视频网站有哪些
  • 自动化测试相关使用
  • 做移门图的 网站有哪些做招聘网站需要做什么公司
  • TDengine 数字函数 RADIANS 用户手册
  • 做导航网站赚钱企业网站搜索优化外
  • 网站网页设计公司海南省建设执业中心网站
  • 如何解压一个MacOs PKG 安装包修改内容后重新打包
  • Linux 与 Windows:谁更适合 CLI 模式 AI 编程工具?
  • 深度学习(15)-PyTorch torch.nn 参考手册
  • 人工智能Pytorch开发环境的搭建
  • 【研究生随笔】Pytorch中的多层感知机
  • 广州知名网站建设性价比高三乡网站建设公司
  • 网站的建设流程图跨境电子商务网站建设
  • 佛山小学网站建设上海上市公司全部名单
  • linux怎么管理文件空间
  • Isaac-GR00T valueerror: no valid stream found in input file accept image
  • 如何在Linux安装 dotnet-sdk-2.2.207-linux-x64.tar.gz(解压+配置+验证)
  • js图片展示网站wordpress 豆瓣评分
  • 深度学习-175-知识图谱技术之langchain与neo4j的深入剖析
  • JAVA算法练习题day49
  • P1028 [NOIP 2001 普及组] 数的计算
  • centos怎么查看磁盘是机械还是固态
  • 全面掌握 PostgreSQL 关系型数据库,PostgreSQL 介绍,笔记02
  • 自己做网站在线看pdf建立官方网站多少钱