rabbitMQ解决分布式事物

RabbitMQ解决分布式事务原理: 采用最终一致性原理。

需要保证以下三要素

1、确认生产者一定要将数据投递到MQ服务器中(采用MQ消息确认机制)

生产者发送消息代码:

// 封装消息
Message message = MessageBuilder.withBody(msg.getBytes()).setContentType(MessageProperties.CONTENT_TYPE_JSON)
				.setContentEncoding("utf-8").setMessageId(orderId).build();
// 构建回调返回的数据
CorrelationData correlationData = new CorrelationData(orderId);

this.rabbitTemplate.setMandatory(true);
this.rabbitTemplate.setConfirmCallback(this);

// 发送消息
rabbitTemplate.convertAndSend("order_exchange_name", "orderRoutingKey", message, correlationData);

生产者继承 RabbitTemplate.ConfirmCallback ,重写confirm方法

// 生产消息确认机制
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
	String orderId = correlationData.getId();
	System.out.println("消息id:" + correlationData.getId());
	if (ack) {
		System.out.println("消息发送确认成功");
	} else {
		send(orderId);
		System.out.println("消息发送确认失败:" + cause);
	}
}

2MQ消费者消息能够正确消费消息,采用手动ACK模式(注意重试幂等性问题)

3、如何保证第一个事务先执行,采用补偿机制,在创建一个补单消费者进行监听,如果订单没有创建成功,进行补单。

猜你喜欢

转载自blog.csdn.net/qq_38270106/article/details/83720301