分布式事务(可靠性生产者)
实现思路:采取消息冗余+定时器
实际上就是保证消息的成功投递
例子:订单(生产者)+派送(消费者) 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表
order_message消息状态表
也就是消息冗余的意思;两个表用order_id关联;order_id作为主键,避免出现幂等性问题;创建两个的model,不创建也可以,本例采用的jdbc;
构建交换机和队列
@Configuration
public class OrderConfiguration {
@Bean
public FanoutExchange orderExchange(){
return new