欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java連接MQ實現(xiàn)信息查詢的操作過程

 更新時間:2024年11月23日 15:55:12   作者:牛肉胡辣湯  
本文介紹了如何使用Java連接ApacheRocketMQ實現(xiàn)信息查詢的功能,通過編寫Java代碼連接MQ并實現(xiàn)生產(chǎn)者發(fā)送消息和消費者接收并處理消息的過程,展示了如何在分布式系統(tǒng)中實現(xiàn)訂單處理系統(tǒng)的解耦,感興趣的朋友跟隨小編一起看看吧

Java連接MQ實現(xiàn)信息查詢

在分布式系統(tǒng)中,消息隊列(MQ)是一種常見的用于實現(xiàn)系統(tǒng)之間解耦、消息傳遞和異步通信的技術。本文將介紹如何使用Java連接MQ并實現(xiàn)信息查詢的過程。

1. 準備工作

首先,我們需要選擇一個適合的消息隊列系統(tǒng)作為示例。在本文中,我們選擇Apache RocketMQ作為消息隊列服務。你可以根據(jù)實際情況選擇其他MQ系統(tǒng)。 其次,確保你已經(jīng)安裝并配置好所選消息隊列系統(tǒng),獲取相應的依賴庫并引入到Java項目中。

2. 編寫Java代碼連接MQ

javaCopy code
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
public class MQProducer {
    public static void main(String[] args) {
        try {
            DefaultMQProducer producer = new DefaultMQProducer("example_group");
            producer.setNamesrvAddr("localhost:9876");
            producer.start();
            Message msg = new Message("TopicTest", "TagA", "Hello MQ".getBytes());
            SendResult sendResult = producer.send(msg);
            System.out.printf("SendResult: %s%n", sendResult);
            producer.shutdown();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代碼通過創(chuàng)建一個DefaultMQProducer對象,并設置消息發(fā)送的Topic、Tag和內容,然后發(fā)送消息到消息隊列。在實際項目中,你還可以添加異常處理、消息確認等邏輯。

3. 編寫Java代碼實現(xiàn)信息查詢

javaCopy code
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.*;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;
public class MQConsumer {
    public static void main(String[] args) {
        try {
            DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("example_group");
            consumer.setNamesrvAddr("localhost:9876");
            consumer.subscribe("TopicTest", "*");
            consumer.registerMessageListener(new MessageListenerConcurrently() {
                @Override
                public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                    for (MessageExt msg : msgs) {
                        System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), new String(msg.getBody()));
                    }
                    return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
                }
            });
            consumer.start();
            System.out.printf("Consumer Started.%n");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代碼通過創(chuàng)建一個DefaultMQPushConsumer對象,并設置消費組和消息訂閱的Topic,然后注冊消息監(jiān)聽器,實時消費并處理消息。在實際項目中,你可以對消息內容進行解析和查詢等操作。

4. 運行代碼

編譯并運行上述代碼,你將可以看到生產(chǎn)者發(fā)送消息到消息隊列,并消費者接收到并處理消息的過程。通過這種方式,你可以實現(xiàn)基于MQ的信息查詢功能。

在線商城的訂單處理系統(tǒng)來演示如何使用Java連接MQ實現(xiàn)信息查詢的功能。假設我們有一個訂單系統(tǒng),訂單創(chuàng)建后需要異步通知庫存系統(tǒng)進行庫存扣減。

場景描述

  • 訂單系統(tǒng)創(chuàng)建訂單并將訂單信息發(fā)送到MQ;
  • 庫存系統(tǒng)監(jiān)聽MQ中的訂單消息,接收訂單信息并進行庫存扣減;
  • 庫存系統(tǒng)處理完畢后,將結果信息發(fā)送到MQ;
  • 訂單系統(tǒng)監(jiān)聽MQ中的庫存結果消息,接收庫存扣減結果信息并更新訂單狀態(tài)。

示例代碼

訂單系統(tǒng)發(fā)送訂單信息到MQ

javaCopy code
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
public class OrderMQProducer {
    public static void main(String[] args) {
        try {
            DefaultMQProducer producer = new DefaultMQProducer("order_group");
            producer.setNamesrvAddr("localhost:9876");
            producer.start();
            // 模擬訂單信息
            String orderInfo = "Order ID: 123456, Product ID: 789, Quantity: 2";
            Message msg = new Message("OrderTopic", "OrderTag", orderInfo.getBytes());
            SendResult sendResult = producer.send(msg);
            System.out.println("Order message sent successfully. SendResult: " + sendResult);
            producer.shutdown();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

庫存系統(tǒng)監(jiān)聽MQ并處理訂單信息

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.*;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;
public class InventoryMQConsumer {
    public static void main(String[] args) {
        try {
            DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("inventory_group");
            consumer.setNamesrvAddr("localhost:9876");
            consumer.subscribe("OrderTopic", "OrderTag");
            consumer.registerMessageListener(new MessageListenerConcurrently() {
                @Override
                public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                    for (MessageExt msg : msgs) {
                        // 模擬庫存扣減邏輯
                        String orderInfo = new String(msg.getBody());
                        System.out.println("Received order message: " + orderInfo);
                        System.out.println("Inventory deduction processing...");
                    }
                    return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
                }
            });
            consumer.start();
            System.out.println("Inventory system started listening for order messages.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

通過上述示例代碼,訂單系統(tǒng)可以將訂單信息發(fā)送到MQ,庫存系統(tǒng)監(jiān)聽MQ并處理訂單信息,實現(xiàn)了訂單與庫存系統(tǒng)的解耦。這種方式可以提高系統(tǒng)的可靠性和擴展性,同時提升系統(tǒng)整體性能和用戶體驗。

Apache RocketMQ 是一個開源的分布式消息中間件系統(tǒng),最初是由阿里巴巴集團開發(fā)并貢獻給 Apache 軟件基金會的。RocketMQ 提供可靠的消息傳遞和分布式消息發(fā)布/訂閱功能,具有高吞吐量、低延遲、高可用性和可伸縮性的特點,適用于大規(guī)模分布式系統(tǒng)中的消息通信。 以下是一些 Apache RocketMQ 的主要特性:

  • 分布式架構:RocketMQ 的架構分為多個組件,包括 Name Server、Broker、Producer 和 Consumer,各個組件協(xié)同工作實現(xiàn)消息的可靠傳遞和處理。
  • 高性能:RocketMQ 支持每秒數(shù)十萬條消息的高吞吐量傳輸。消息存儲使用順序寫盤,從而提高性能,同時支持消息的批量發(fā)送和接收,提升效率。
  • 可靠性:RocketMQ 提供多種消息傳遞方式,包括同步傳輸、異步傳輸和單向傳輸,保證消息的可靠傳遞。此外還提供消息重試機制和容錯機制,保證消息傳遞的可靠性。
  • 豐富的特性:RocketMQ 提供豐富的特性,包括消息的順序傳遞、事務消息、延遲消息、消息過濾、消息軌跡等,滿足各種復雜的應用場景需求。
  • 水平擴展:RocketMQ 支持在集群中動態(tài)添加 Broker 節(jié)點,以實現(xiàn)水平擴展和負載均衡,提升系統(tǒng)的可伸縮性。
  • 監(jiān)控和管理:RocketMQ 提供詳細的監(jiān)控和管理功能,包括消息發(fā)送和消費的統(tǒng)計信息、消息堆積情況、Broker 節(jié)點的運行狀態(tài)等,方便運維人員監(jiān)控和管理整個消息系統(tǒng)。

結論

通過上述步驟,我們成功地使用Java連接MQ并實現(xiàn)信息查詢功能。消息隊列技術可以很好地實現(xiàn)系統(tǒng)之間的解耦和異步通信,為構建高效的分布式系統(tǒng)提供了重要的支持。希會本文的內容能夠幫助到你理解和應用MQ技術。

到此這篇關于Java連接MQ實現(xiàn)信息查詢的文章就介紹到這了,更多相關Java MQ信息查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現(xiàn)動態(tài)代理的實例代碼

    Java實現(xiàn)動態(tài)代理的實例代碼

    代理模式是常用的java設計模式,他的特征是代理類與委托類有同樣的接口,代理類主要負責為委托類預處理消息、過濾消息、把消息轉發(fā)給委托類,以及事后處理消息等,這篇文章主要給大家介紹了關于Java實現(xiàn)動態(tài)代理的相關資料,需要的朋友可以參考下
    2021-09-09
  • Mybatis Plus Wrapper查詢某幾列的方法實現(xiàn)

    Mybatis Plus Wrapper查詢某幾列的方法實現(xiàn)

    MybatisPlus中,使用Wrapper的select和notSelect方法可以精確控制查詢的字段,本文就來介紹一下Mybatis Plus Wrapper查詢某幾列的方法實現(xiàn),感興趣的可以了解一下
    2024-10-10
  • Java?-jar參數(shù)設置小結

    Java?-jar參數(shù)設置小結

    本文主要介紹了Java?-jar參數(shù)設置小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • 詳解spring-data-jpa中jpql的投影查詢

    詳解spring-data-jpa中jpql的投影查詢

    投影查詢,就是僅僅檢索表的部分字段。而不是粗暴的 SELECT * FROM...檢索出所有列數(shù)據(jù),這篇文章主要介紹了spring-data-jpa中jpql的投影查詢,需要的朋友可以參考下
    2021-09-09
  • Java中自然排序和比較器排序詳解

    Java中自然排序和比較器排序詳解

    這篇文章給大家介紹Java中的排序并不是指插入排序、希爾排序、歸并排序等具體的排序算法。而是自然排序和比較器排序,文中通過實例代碼介紹的很詳細,有需要的朋友們可以參考借鑒。
    2016-09-09
  • 一文詳解Java項目中如何優(yōu)雅的使用枚舉類型

    一文詳解Java項目中如何優(yōu)雅的使用枚舉類型

    枚舉類型在開發(fā)中是很常見的,有非常多的應用場景,這篇文章我們就來學習一下項目中如何優(yōu)雅的使用枚舉類型,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • springBoot詳解集成Swagger流程

    springBoot詳解集成Swagger流程

    Swagger是一個規(guī)范和完整的框架,用于生成、描述、調用和可視化?Restful?風格的?Web?服務??傮w目標是使客戶端和文件系統(tǒng)作為服務器以同樣的速度來更新。文件的方法、參數(shù)和模型緊密集成到服務器端的代碼,允許API來始終保持同步
    2022-06-06
  • Java中的Apache?Commons?Math使用詳解

    Java中的Apache?Commons?Math使用詳解

    Java中的Apache?Commons?Math是一個開源的數(shù)學庫,它提供了許多常用的數(shù)學函數(shù)和算法,這個庫對于需要處理大量數(shù)據(jù)的開發(fā)者來說非常有用,因為它可以大大簡化代碼并提高效率,本文給大家詳解講解Java中的Apache?Commons?Math知識,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • Java設計模式之靜態(tài)代理模式實例分析

    Java設計模式之靜態(tài)代理模式實例分析

    這篇文章主要介紹了Java設計模式之靜態(tài)代理模式,結合實例形式分析了靜態(tài)代理模式的概念、原理、定義與用法,需要的朋友可以參考下
    2018-04-04
  • Mybatis的dao層,service層的封裝方式

    Mybatis的dao層,service層的封裝方式

    這篇文章主要介紹了Mybatis的dao層,service層的封裝方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論