springboot + rabbitmq 实现分布式事务(可靠性生产者)

分布式事务(可靠性生产者)

实现思路:采取消息冗余+定时器

实际上就是保证消息的成功投递

例子:订单(生产者)+派送(消费者) springboot+rabbitmq在Windows环境下实现

pom:

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

配置文件yml:

server:
  port: 8012
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/rabbit_test_order?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
    driver-class-name: com.mysql.jdbc.Driver
  rabbitmq:
#    username: guest
#    password: guest
#    host: 127.0.0.1
#    virtual-host: /
#    port: 5567
    publisher-confirm-type: correlated

由于是本地搭建的环境,只需要配置一下手动确认就可以了,账号密码用的也是默认的,如果修改了,可以配置一下。

一般有订单,肯定会有一个订单表,在此基础上,加上一个订单的消息表,来存储订单的消息投递情况,默认值为0,表示消息投递失败(定时器主要跑的就是这类订单);如果消息投递成功,修改订单状态为1;如果异常处理也失败了,修改单子的状态为2,这个可以人为排查。

order表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRGSn2rJ-1624962176147)(C:\Users\ning\AppData\Roaming\Typora\typora-user-images\image-20210629175431375.png)]

order_message消息状态表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hQb2gulN-1624962176153)(C:\Users\ning\AppData\Roaming\Typora\typora-user-images\image-20210629175528469.png)]

也就是消息冗余的意思;两个表用order_id关联;order_id作为主键,避免出现幂等性问题;创建两个的model,不创建也可以,本例采用的jdbc;

构建交换机和队列

@Configuration
public class OrderConfiguration {
   

    @Bean
    public FanoutExchange orderExchange(){
   
        return new 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值