成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringBoot 與RabbitMQ、RocketMQ高可靠、高性能、分布式應用實踐

開發 架構
在電商等系統中,下單后需要進行一系列的處理,包括庫存扣減、支付通知等。可以將訂單相關的消息發送到消息隊列中,由消費者異步地進行處理,從而提高系統的處理能力和可靠性。

Spring Boot 是一個基于 Spring 框架的快速開發框架,而 RabbitMQ 和 RocketMQ 則是常用的消息隊列中間件。下面是它們常用的一些用法和場景。

1、訂單處理

在電商等系統中,下單后需要進行一系列的處理,包括庫存扣減、支付通知等。可以將訂單相關的消息發送到消息隊列中,由消費者異步地進行處理,從而提高系統的處理能力和可靠性。

使用 RabbitMQ 實現訂單處理的示例代碼:

// 發送訂單消息
rabbitTemplate.convertAndSend("order-exchange", "order-routing-key", order);

// 消費訂單消息
@RabbitListener(queues = "order-queue")
public void handleOrderMessage(Order order) {
// 處理訂單相關的業務邏輯
}

使用 RocketMQ 實現訂單處理的示例代碼:

// 發送訂單消息
DefaultMQProducer producer = new DefaultMQProducer("order-producer-group");
producer.setNamesrvAddr("localhost:9876");
Message message = new Message("order-topic", "order-tag", order.toString().getBytes());
producer.send(message);

// 消費訂單消息
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("order-consumer-group");
consumer.setNamesrvAddr("localhost:9876");
consumer.subscribe("order-topic", "order-tag");
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> messages, ConsumeConcurrentlyContext context) {
for (MessageExt message : messages) {
// 處理訂單相關的業務邏輯
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();

2、日志處理

在分布式系統中,各個節點產生的日志需要進行集中處理和存儲,以便后續的分析和監控??梢允褂孟㈥犃袑⑷罩鞠l送到中心化的日志系統中。

使用 RabbitMQ 實現日志處理的示例代碼:

// 發送日志消息
rabbitTemplate.convertAndSend("log-exchange", "log-routing-key", log);

// 消費日志消息
@RabbitListener(queues = "log-queue")
public void handleLogMessage(Log log) {
// 處理日志相關的業務邏輯
}

使用 RocketMQ 實現日志處理的示例代碼:

// 發送日志消息
DefaultMQProducer producer = new DefaultMQProducer("log-producer-group");
producer.setNamesrvAddr("localhost:9876");
Message message = new Message("log-topic", "log-tag", log.toString().getBytes());
producer.send(message);

// 消費日志消息
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("log-consumer-group");
consumer.setNamesrvAddr("localhost:9876");
consumer.subscribe("log-topic", "log-tag");
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> messages, ConsumeConcurrentlyContext context) {
for (MessageExt message : messages) {
// 處理日志相關的業務邏輯
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();

3、分布式事務

在分布式系統中,不同的服務之間需要進行事務管理,以保證數據的一致性和可靠性??梢允褂孟㈥犃衼韺崿F分布式事務的消息確認和回滾。

使用 RabbitMQ 實現分布式事務的示例代碼:

// 發送訂單消息和庫存消息
rabbitTemplate.invoke(new RabbitCallback<Void>() {
public Void doInRabbit(Channel channel) throws Exception {
channel.txSelect();
channel.basicPublish("order-exchange", "order-routing-key", null, order.toString().getBytes());
channel.basicPublish("stock-exchange", "stock-routing-key", null, stock.toString().getBytes());
channel.txCommit();
return null;
}
});

// 消費訂單消息和庫存消息
@RabbitListener(queues = "order-queue")
@Transactional
public void handleOrderMessage(Order order) {
// 處理訂單相關的業務邏輯
}

@RabbitListener(queues = "stock-queue")
@Transactional
public void handleStockMessage(Stock stock) {
// 處理庫存相關的業務邏輯
}

使用 RocketMQ 實現分布式事務的示例代碼:

// 發送訂單消息和庫存消息
TransactionMQProducer producer = new TransactionMQProducer("transaction-producer-group");
producer.setNamesrvAddr("localhost:9876");
producer.setTransactionListener(new TransactionListener() {
public LocalTransactionState executeLocalTransaction(Message message, Object arg) {
// 執行本地事務
return LocalTransactionState.COMMIT_MESSAGE;
}

public LocalTransactionState checkLocalTransaction(MessageExt message) {
// 檢查本地事務狀態
return LocalTransactionState.COMMIT_MESSAGE;
}
});
Message message1 = new Message("order-topic", "order-tag", order.toString().getBytes());
Message message2 = new Message("stock-topic", "stock-tag", stock.toString().getBytes());
TransactionSendResult result = producer.sendMessageInTransaction(Arrays.asList(message1, message2), null);

// 消費訂單消息和庫存消息
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("transaction-consumer-group");
consumer.setNamesrvAddr("localhost:9876");
consumer.subscribe("order-topic", "order-tag");
consumer.subscribe("stock-topic", "stock-tag");
consumer.registerMessageListener(new MessageListenerOrderly() {
public ConsumeOrderlyStatus consumeMessage(List<MessageExt> messages, ConsumeOrderlyContext context) {
for (MessageExt message : messages) {
// 處理訂單或庫存相關的業務邏輯
}
return ConsumeOrderlyStatus.SUCCESS;
}
});
consumer.start();

4、消息隊列比較

RabbitMQ 和 RocketMQ 都是常用的消息隊列中間件,它們在特點和使用上有些區別。

  • RabbitMQ 采用 AMQP(高級消息隊列協議),支持多種編程語言和多種操作系統。RabbitMQ 的消息傳輸可靠性較高,但性能較低。
  • RocketMQ 采用自定義的協議,適合 Java 應用,支持高吞吐量和高可用性。RocketMQ 的消息傳輸可靠性較低,但性能較高。
責任編輯:姜華 來源: 今日頭條
相關推薦

2019-09-12 08:50:37

Kafka分布式系統服務器

2016-09-23 10:51:23

騰訊云

2022-06-30 08:04:16

Redis分布式鎖Redisson

2012-12-28 17:31:06

2024-01-05 07:28:50

分布式事務框架

2023-08-22 13:16:00

分布式數據庫架構數據存儲

2021-07-06 10:35:46

分布式KafkaLinux

2025-03-25 10:29:52

2025-04-11 09:57:16

2022-12-08 08:13:11

分布式數據庫CAP

2024-04-08 11:04:03

2009-02-06 09:38:38

memcached分布式緩存系統ASP.NET

2011-09-14 10:08:07

Beanstalkd

2024-01-26 13:17:00

rollbackMQ訂單系統

2022-10-08 15:41:08

分布式存儲

2017-10-25 13:58:52

四層負載均衡MGW

2022-05-27 07:49:14

RocketMQ消息中間件分布式

2023-08-30 08:33:07

RabbitMQSpringBoot消息信息

2023-12-18 11:21:40

MongoDB數據庫

2019-05-29 14:49:02

KafkaRocketMQRabbitMQ
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色婷婷久久久亚洲一区二区三区 | 在线视频亚洲 | 国产精品亚洲一区 | 日本色婷婷 | 91麻豆久久久 | 日本一区二区三区四区 | 91天堂| 国产一区二区三区四区三区四 | 久久久久国产精品午夜一区 | 一级毛片高清 | 伊人无码高清 | 国产美女一区二区 | 国产精品视频综合 | 91精品国产麻豆 | 日韩视频成人 | 人人性人人性碰国产 | 亚洲国产午夜 | 黑人精品欧美一区二区蜜桃 | 亚洲午夜精品一区二区三区 | 性欧美精品一区二区三区在线播放 | 四虎影院免费在线 | 色花av| 蜜桃传媒一区二区 | 免费福利视频一区二区三区 | 国产精品一区二区在线 | 精品在线99 | 欧美日日| 日韩一级二级片 | 国产中的精品av涩差av | 亚洲精品成人在线 | 欧美激情久久久久久 | 欧美v免费 | 午夜视频在线免费观看 | 黄色av网站在线免费观看 | 亚洲精品乱码久久久久久按摩观 | 中文字幕亚洲欧美日韩在线不卡 | 欧美一级久久 | 伊人网综合| 欧美精品1区2区 | zzzwww在线看片免费 | 成人精品一区亚洲午夜久久久 |