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

防疫站24小时在线咨询建设教育网站怎么样

防疫站24小时在线咨询,建设教育网站怎么样,经典软文案例标题加内容,wordpress 中文标题在RabbitMQ中,生产者为了确保消息发送成功,一种是使用 confirm 确认机制,另一种就是使用事务机制,事务机制就是允许生产者在发送消息时,将多个消息操作作为一个原子单元进行处理,要么所有操作都成功执行&am…

在RabbitMQ中,生产者为了确保消息发送成功,一种是使用 confirm 确认机制,另一种就是使用事务机制,事务机制就是允许生产者在发送消息时,将多个消息操作作为一个原子单元进行处理,要么所有操作都成功执行,要么都不执行。

AMQP 协议中事务操作的基本流程

  1. 开启事务:客户端发送tx.select命令
  2. 执行消息操作:发布消息、确认消息等
  3. 提交或回滚
    • 提交(tx.commit):确认所有操作
    • 回滚(tx.rollback):取消所有操作

RabbitMQ 中事务的核心方法

RabbitMQ是基于AMQP协议实现的,在 RabbitMQ中,事务是通过在Channel上开启的,其中核心方法有:

  • channel.txSelect():开启事务模式。
  • channel.txCommit():提交事务,确认所有操作。
  • channel.txRollback():回滚事务,撤销所有未提交的操作。

生产者通过txSelect()开启一个事务块。在这个事务块内,所有发送到RabbitMQ的消息都不会立即被确认,而是处于一种“暂存”状态。只有当生产者调用txCommit方法提交事务时,这些消息才会被真正处理和确认。如果在事务块内发生错误,生产者可以调用txRollback方法回滚事务,所有暂存的消息将不会被处理。

public class RabbitMQTxSelectTest {private static final String QUEUE_NAME = "tx_queue";public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 开启事务channel.txSelect();try {String message = "第一条事务消息";channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF - 8"));System.out.println(" [x] 发送消息: '" + message + "'");// 模拟错误int error = 1 / 0;message = "第二条事务消息";channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF - 8"));System.out.println(" [x] 发送消息: '" + message + "'");// 提交事务channel.txCommit();System.out.println("事务提交成功");} catch (Exception e) {// 回滚事务channel.txRollback();System.out.println("事务回滚");} finally {channel.close();connection.close();}}
}

代码中,开启事务后发送了第一条消息,接着模拟了一个错误。由于错误发生,txCommit不会执行,而是进入catch块执行txRollback,因为事务被回滚,两条消息都不会真正到达队列。

事务机制的优缺点

  • 优点
    • 数据一致性:确保一组消息要么全部成功发送到RabbitMQ并被处理,要么全部不发送,保证了数据的一致性。这在一些对数据完整性要求极高的场景,如金融交易中的消息处理。
    • 简单易用:RabbitMQ的事务机制提供了直观的编程模型,可以很容易地理解和实现消息的可靠发送。
  • 缺点
    • 性能损耗:事务机制会带来显著的性能开销。因为在事务模式下,消息不能立即被确认和处理,而是要等到事务提交,这增加了消息在系统中的停留时间。同时,事务的开启、提交和回滚操作都需要与RabbitMQ服务器进行额外的交互,导致网络开销增加。
    • 资源占用:事务模式下,消息在事务提交前一直处于暂存状态,这会占用更多的内存等资源。如果事务包含大量消息或者事务处理时间过长,可能会导致服务器资源耗尽。

所以,在实际开发中,需要根据业务场景权衡事务机制的使用。如果对消息的一致性要求极高,而对性能要求相对较低,那么事务机制是一个不错的选择;如果系统对性能要求较高,对消息的可靠性可以通过其他方式(如确认机制)来保证,那么可以考虑不使用事务机制。

事务与发布者确认(Confirm)机制对比

维度事务模式Confirm 模式
可靠性原子性保证(全成功/全失败)单条消息确认(无原子性)
性能差(同步阻塞)优(异步,接近非事务性能)
适用场景金融扣款、订单创建等关键操作日志收集、实时监控等高吞吐场景
代码复杂度简单(同步模型)较高(需处理异步回调)
http://www.dtcms.com/a/546794.html

相关文章:

  • 将电脑做的网站放到外网住建部网站2015年城市建设统计
  • 站酷设计网站官网入口插画设计济宁亿峰科技做网站一年多少费用
  • 网站备案域名更改公司濮阳网络直播
  • 自学网站建设多久如何做网络推广人员
  • 荣成做网站中国建设法律法规网官方网站
  • 临海建设局官方网站文昌网站建设 myvodo
  • 运城住房和建设局网站新网站建设一般多少钱
  • W3C WSDL 活动:推动Web服务互操作性的关键力量
  • 婚庆网站建设的需求分析wordpress注册授权
  • 三维重建【0-D】3D Gaussian Splatting:相机标定原理与步骤
  • 中国企业商务网站建设河南seo网站多少钱
  • 做预算兼职的网站东莞设计网站企业
  • 网站建设项目工作分解结构建设银行交学费网站
  • Python导入opencv报错“DLL load failed while importing cv2: 找不到指定的模块”排错过程记录
  • 黄金外汇网站建设网站备案在哪查
  • 大二java学习笔记:子类与继承
  • 网站毕设代做免费seo网站诊断
  • 旅游网站分析广告喷绘制作公司介绍
  • 解决 IsaacSim 5.0 与 ROS2 Python 版本冲突的完整指南
  • 万网空间存放两个网站湖州网站建设哪家公司好
  • 酒店 企业网站建设的思路jsp ajax网站开发典型实例 pdf
  • 关于命理的一些猜想
  • 西安有那些做网站的公司好商城的网站统计如何做
  • 复古风格网站建筑网站大全免费
  • 网站改版建设,有哪些内容唐山公司网站建设 中企动力唐山
  • 柏乡企业做网站h5网站制作费用
  • 专业企业网站建设报价潍坊专业技术人员继续教育
  • Quartus II下载安装教程Quartus II 18保姆级安装步骤(附安装包)
  • 查询网站开发的端口建站优化
  • 外贸公司网站怎么做网站运营推广该如何做