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

乡镇中心小学校园网站建设指南推介网官网

乡镇中心小学校园网站建设指南,推介网官网,软件下载网站如何履行安全管理义务确保提供的软件,电脑系统优化软件排行榜文章目录 RabbitMQ 事务消息概述实现原理代码实现不采用事务采用事务 RabbitMQ 事务消息 概述 RabbitMQ 的 AMQP 协议实现了事务机制,允许开发者保证消息的发送和接收时原子性的,也就是说,要么消息全都发送成功,要么全都发送失败…

文章目录

  • RabbitMQ 事务消息
    • 概述
    • 实现原理
    • 代码实现
      • 不采用事务
      • 采用事务

RabbitMQ 事务消息


概述

RabbitMQ 的 AMQP 协议实现了事务机制,允许开发者保证消息的发送和接收时原子性的,也就是说,要么消息全都发送成功,要么全都发送失败(只与发送方有关).

实现原理

AMQP 事务实现类似于传统数据库事务,允许在一个事务中发送多条消息,并在最后提交或回滚.

  • 事务开始:客户端发送 tx.select 方法,RabbitMQ 开启一个新的事务上下文.
  • 事务内的操作:客户端发送消息 basic.publish,RabbitMQ 将这些消息暂存在内存中,并标记为未提交.
  • 事务提交:客户端发送 tx.commit 方法,RabbitMQ 将所有暂存的消息写入队列,并且如果消息标记为持久化,那么就把消息保存到磁盘.
  • 事务回滚:客户端发送 tx.rollback 方法,RabbitMQ 丢弃所有暂存的消息,不会写入队列.

代码实现

不采用事务

a)配置文件

spring:application:name: rabbitmqrabbitmq:host: env-baseport: 5672username: rootpassword: 1111

b)配置常量

object MQConst {// 事务const val TRANS_QUEUE = "trans.queue"}

c)定义队列

@Configuration
class MQConfig {@Beanfun transQueue() = Queue(MQConst.TRANS_QUEUE)}

d)发送接口
两条消息之间故意触发异常.

@RestController
@RequestMapping("/mq")
class MQApi(val rabbitTemplate: RabbitTemplate,
) {@RequestMapping("/trans-close")fun transClose(): String {rabbitTemplate.convertAndSend("", MQConst.TRANS_QUEUE, "trans msg 1")//触发异常val a = 1 / 0rabbitTemplate.convertAndSend("", MQConst.TRANS_QUEUE, "trans msg 1")return "ok"}}

e)效果如下:
此时队列中只有一条消息,说明消息不具备事务特性.
在这里插入图片描述
在这里插入图片描述

采用事务

a)配置两个 Bean

  1. 由于事务对整个 RabbitTemplate 都会有影响,因此这里重新定义一个 Template bean.
  2. 还需要配置一个 RabbitMQ事务管理器.
@Configuration
class GlobalConfig {@Bean("transRabbitTemplate")fun transRabbitTemplate(connectionFactory: ConnectionFactory): RabbitTemplate {val mq = RabbitTemplate(connectionFactory)mq.isChannelTransacted = true // 开启事务机制return mq}@Beanfun rabbitTransactionManager(connectionFactory: ConnectionFactory): RabbitTransactionManager {return RabbitTransactionManager(connectionFactory)}}

b)如下步骤:

  • 使用新定义的事务 mq bean.
  • 在方法上加上 @Transaction 注解.
@RestController
@RequestMapping("/mq")
class MQApi(val transRabbitTemplate: RabbitTemplate,
) {@Transactional@RequestMapping("/trans-open")fun transOpen(): String {transRabbitTemplate.convertAndSend("", MQConst.TRANS_QUEUE, "trans msg 1")//触发异常val a = 1 / 0transRabbitTemplate.convertAndSend("", MQConst.TRANS_QUEUE, "trans msg 1")return "ok"}}

c)效果演示
在这里插入图片描述

在这里插入图片描述

http://www.yayakq.cn/news/878960/

相关文章:

  • 中国做视频网站有哪些内容做网站大约需要多少钱
  • 弄个做网站公司网店美工的职责有哪些
  • 网站做的最好的网站有哪些wordpress添加百度云
  • 宁波育才建设教育集团网站怎么将网站做成小程序
  • wix做网站教程自己怎么在电脑上做网站
  • 百度网站v2升级到v3怎么做东营建设信息网站电话
  • 广州网站seo地址dw做企业网站
  • 网站建设个人接单wordpress装到路由器上
  • 中卫网站推广营销向百度提交网站
  • 巩义网站优化培训会员管理系统哪个好
  • 负责公司网站建设的岗位叫什么漂亮的网站底部代码
  • 百度网站检测江苏省建设厅网站证件查询
  • 企业网站推广的模式推广网站的方法有
  • 大连普兰店网站建设wordpress页面功能
  • 名片式网站模板在家做兼职官方网站平台
  • 平面设计的网站有哪些网站关于申请网站建设的报告
  • 室内设计网站有哪些比较好重庆妇科医院排名前十
  • 菲律宾做网站好吗无锡网页设计培训公司
  • 怎样做天猫网站视频扶沟县建设局网站
  • 网站功能分析推广优化seo
  • 北京十佳网站建设行业网站制作
  • 怎么做外网的网站大连做公司网站哪家好
  • 网站制作很好 乐云践新建设网站书籍pdf
  • 扁平化高端网站模板福州做网站改版哪里比较好
  • 网站浏览器兼容wordpress数据库备份恢复
  • 建一个平台网站需要多少钱大连网站建设信息
  • 兰州网站程序建设东莞哪家公司做网站好
  • 药企做网站百度指数的使用方法
  • 上海正规网站建设耗材河南建设网站制作
  • 娄底网站建设设计济宁网站建设 悍诺