最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

RabbitMQ的Direct Exchange模式實現(xiàn)的消息發(fā)布案例(示例代碼)

 更新時間:2024年09月12日 10:57:19   作者:Xwzzz_  
本文介紹了RabbitMQ的DirectExchange模式下的消息發(fā)布和消費的實現(xiàn),詳細說明了如何在DirectExchange模式中進行消息的發(fā)送和接收,以及消息處理的基本方法,感興趣的朋友跟隨小編一起看看吧

Producer生產者代碼

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class RabbitMQProducer {
    private final static String EXCHANGE_NAME = "direct_message_exchange";
    private final static String EXCHANGE_TYPE = "direct";
    public static void main(String[] args) {
        // 1. 創(chuàng)建連接工廠,設置連接參數
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("localhost");
        connectionFactory.setPort(5672); // RabbitMQ默認端口
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        try (Connection connection = connectionFactory.newConnection();
             Channel channel = connection.createChannel()) {
            // 2. 聲明交換機 (direct類型,持久化)
            channel.exchangeDeclare(EXCHANGE_NAME, EXCHANGE_TYPE, true);
            // 3. 聲明隊列 (持久化,非獨占,連接斷開時不自動刪除)
            channel.queueDeclare("queue5", true, false, false, null);
            channel.queueDeclare("queue6", true, false, false, null);
            channel.queueDeclare("queue7", true, false, false, null);
            // 4. 綁定隊列到交換機,設置路由鍵
            channel.queueBind("queue5", EXCHANGE_NAME, "order");
            channel.queueBind("queue6", EXCHANGE_NAME, "order");
            channel.queueBind("queue7", EXCHANGE_NAME, "course");
            // 5. 準備要發(fā)送的消息
            String message = "你好,學相伴:www.kuangstudy.com";
            // 6. 向交換機發(fā)送消息,使用路由鍵 "course"
            channel.basicPublish(EXCHANGE_NAME, "course", null, message.getBytes("UTF-8"));
            System.out.println("消息發(fā)送成功!");
        } catch (Exception ex) {
            // 捕獲異常并打印堆棧信息
            ex.printStackTrace();
            System.out.println("消息發(fā)送出現(xiàn)異常...");
        } finally {
            // 在try-with-resources中,不再需要顯式關閉連接和通道
            // 會自動關閉連接和通道
        }
    }
}

功能點:

  • 聲明了一個Direct類型的交換機,并綁定了三個隊列(queue5,queue6queue7)。其中queue5queue6都綁定到order路由鍵,而queue7綁定到course路由鍵。
  • 發(fā)送了一條消息到course路由鍵綁定的隊列中(即queue7)。

Consumer消費者代碼

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
public class RabbitMQConsumer {
    private final static String QUEUE_NAME = "queue7"; // 與生產者的綁定一致
    private final static String EXCHANGE_NAME = "direct_message_exchange";
    private final static String EXCHANGE_TYPE = "direct";
    public static void main(String[] args) {
        // 1. 創(chuàng)建連接工廠,設置連接參數
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("localhost");
        connectionFactory.setPort(5672); // RabbitMQ默認端口
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        try (Connection connection = connectionFactory.newConnection();
             Channel channel = connection.createChannel()) {
            // 2. 聲明交換機和隊列,與生產者保持一致
            channel.exchangeDeclare(EXCHANGE_NAME, EXCHANGE_TYPE, true);
            channel.queueDeclare(QUEUE_NAME, true, false, false, null);
            // 3. 綁定隊列到交換機,路由鍵為"course"
            channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "course");
            System.out.println(" [*] 等待接收消息...");
            // 4. 定義接收消息的回調函數
            DeliverCallback deliverCallback = (consumerTag, delivery) -> {
                String message = new String(delivery.getBody(), "UTF-8");
                System.out.println(" [x] 接收到的消息: '" + message + "'");
                // 這里可以添加進一步的消息處理邏輯
            };
            // 5. 開始消費消息 (自動應答)
            channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
        } catch (Exception ex) {
            // 捕獲異常并打印堆棧信息
            ex.printStackTrace();
            System.out.println("消費者運行中出現(xiàn)異常...");
        }
    }
}

功能點: 

   1.  與生產者保持一致:消費者的隊列名稱、交換機名稱和路由鍵與生產者保持一致,即監(jiān)聽queue7隊列,并接收路由鍵為course的消息。

   2. 回調函數處理消息:使用DeliverCallback來定義收到消息后的處理邏輯。在回調函數中,delivery.getBody()獲取消息內容,隨后可以對消息進行處理、存儲或其他業(yè)務邏輯操作。

   3 自動應答basicConsume中的true表示自動應答(auto-acknowledge),即消息處理完畢后,RabbitMQ會自動確認消息已成功處理。如果需要手動應答,可以將true替換為false,并在處理完成后調用channel.basicAck()來手動確認消息。

到此這篇關于RabbitMQ的Direct Exchange模式實現(xiàn)的消息發(fā)布案例的文章就介紹到這了,更多相關RabbitMQ Direct Exchange消息內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java手機號最新校驗規(guī)則

    Java手機號最新校驗規(guī)則

    在Java中,進行手機號校驗通常使用正則表達式(Regex)來匹配手機號的格式,以下是一個基于當前(截至2024年)中國手機號規(guī)則的校驗方法,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • JDK10新特性之本地變量類型var的深入理解

    JDK10新特性之本地變量類型var的深入理解

    這篇文章主要給大家介紹了J關于DK10新特性之本地變量類型var的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用JDK10具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-05-05
  • spring boot 自定義starter的實現(xiàn)教程

    spring boot 自定義starter的實現(xiàn)教程

    下面小編就為大家分享一篇spring boot 自定義starter的實現(xiàn)教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 使用nacos實現(xiàn)自定義文本配置的實時刷新

    使用nacos實現(xiàn)自定義文本配置的實時刷新

    我們都知道,使用Nacos時,如果將Bean使用@RefreshScope標注之后,這個Bean中的配置就會做到實時刷新,本文給大家介紹了如何使用nacos實現(xiàn)自定義文本配置的實時刷新,需要的朋友可以參考下
    2024-05-05
  • Java中Integer類型值相等判斷方法

    Java中Integer類型值相等判斷方法

    這篇文章主要給大家介紹了關于Java中Integer類型值相等判斷的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Spring Boot 編寫Servlet、Filter、Listener、Interceptor的方法

    Spring Boot 編寫Servlet、Filter、Listener、Interceptor的方法

    這篇文章給大家介紹了spring-boot中如何定義過濾器、監(jiān)聽器和攔截器,對Spring Boot 編寫Servlet、Filter、Listener、Interceptor的相關知識感興趣的朋友一起看看吧
    2017-07-07
  • Java 實現(xiàn)微信和支付寶支付功能

    Java 實現(xiàn)微信和支付寶支付功能

    這篇文章主要介紹了Java 實現(xiàn)微信和支付寶支付功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • java正則匹配HTML中a標簽里的中文字符示例

    java正則匹配HTML中a標簽里的中文字符示例

    這篇文章主要介紹了java正則匹配HTML中a標簽里的中文字符,涉及java中文正則及HTML元素操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • 完美解決idea moudle沒有藍色的小方塊的問題

    完美解決idea moudle沒有藍色的小方塊的問題

    這篇文章主要介紹了完美解決idea moudle沒有藍色的小方塊的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 詳解Java動態(tài)加載數據庫驅動

    詳解Java動態(tài)加載數據庫驅動

    本篇文章主要介紹了詳解Java動態(tài)加載數據庫驅動,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

鄂托克旗| 富民县| 高雄市| 莒南县| 清远市| 沅陵县| 射洪县| 卢氏县| 福州市| 建昌县| 陵水| 镇巴县| 淳化县| 东兰县| 长乐市| 四子王旗| 清水县| 弥勒县| 罗源县| 西乌| 东兰县| 镶黄旗| 余庆县| 仙游县| 南郑县| 安远县| 镇坪县| 海安县| 遂宁市| 手机| 新野县| 高雄市| 博兴县| 元谋县| 孙吴县| 郁南县| 宽甸| 福州市| 樟树市| 美姑县| 南和县|