1. 程式人生 > >rabbitMQ解決分散式事物

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、如何保證第一個事務先執行,採用補償機制,在建立一個補單消費者進行監聽,如果訂單沒有建立成功,進行補單。