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

建设宣传网站的必要性网站开发人员

建设宣传网站的必要性,网站开发人员,wordpress注册页面修改,福建省 园区网互联及网站建设 网络部分题目文章目录 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/957046/

相关文章:

  • 网站建设优化服务行情网站备案需要几天
  • 网站建设中哪些最重要公司注册流程及注意事项及细节
  • ASP个人网站的建设国家企业信用信息查询全国
  • 怎么知道一个网站的权重中国建设工程信息网招标公告
  • 自己做的网站可以开直播免费微商城平台官网
  • 提供网站建设教学视频湘潭网站建设多少钱
  • 珠海网站制作推广公司垂直门户网站
  • 传媒公司做网站编辑_如何?网站设计主要做什么
  • 大良营销网站建设效果滕州网站建设优化
  • 有哪些是外国人做的网站吗邢台网站制作公司
  • 学校网站建设是什么意思大学生网站建设课程总结
  • 公司网站模板下载智能网站建设公司
  • 合伙做网站app下载登录
  • 成都建设网站高级工程师查询手机做网页的软件
  • 网站建设功能wordpress网站500错误
  • 保山做网站建设北京文化墙设计制作
  • 周至做网站网站建设与行政管理
  • 邯郸哪儿做网站便宜百度云wordpress教程
  • 用自己的计算机做服务器建网站樟树网站制作
  • 视频网站开发微信营销案例100例
  • 弹窗视频网站wordpress插件使用
  • 网站建设的几大原则保山手机网站建设
  • 微商城网站建设如何互联网专属保险什么意思
  • php网站开发学校网站建设组成部分
  • 做企业网站用什么框架一起做单网站怎么样
  • 织梦网站备份几种方法网站页面策划
  • 网站制作需要多少钱官网海洋网站建设公司
  • 南宁网站推广工具dedecms 网站导航
  • 免费企业网站源代码网站项目意义
  • 萝卜建站福州官网网站建设