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

RabbitMQ核心函數(shù)的參數(shù)意義和使用場景分析

 更新時間:2025年06月18日 09:26:24   作者:yuren_xia  
這篇文章主要介紹了RabbitMQ核心函數(shù)的參數(shù)意義和使用場景分析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

RabbitMQ核心函數(shù)的參數(shù)意義和使用場景

??? 一、交換機聲明(exchangeDeclare)

channel.exchangeDeclare(
    "order_exchange",   // exchange: 交換機名稱
    "direct",           // type: 交換機類型
    true,               // durable: 是否持久化
    false,              // autoDelete: 自動刪除
    null                // arguments: 擴展參數(shù)
);

?? 參數(shù)詳解:

參數(shù)比喻解釋常用值使用場景
exchange分揀中心的名字“order_exchange”業(yè)務系統(tǒng)分類(訂單、支付等)
type分揀中心的類型“direct”/“topic”/“fanout”根據(jù)業(yè)務選擇路由策略
durable是否防斷電設備true/falsetrue:重啟后保留交換機配置
autoDelete無人使用時是否拆除true/falsefalse:常駐交換機(推薦)
arguments特殊設備(如安檢通道)null 或 Map<String,Object>高級功能(如備用交換機)

?? 二、隊列聲明(queueDeclare)

channel.queueDeclare(
    "order_queue",      // queue: 隊列名稱
    true,               // durable: 持久化
    false,              // exclusive: 是否獨占
    false,              // autoDelete: 自動刪除
    new HashMap<String, Object>(){{
        put("x-message-ttl", 60000); // 消息60秒過期
    }}                  // arguments: 隊列特性
);

?? 參數(shù)詳解:

參數(shù)比喻解釋常用值使用場景
queue快遞柜的名稱“order_queue”業(yè)務子系統(tǒng)分類
durable是否加固柜體true/falsetrue:重啟后保留隊列和消息
exclusive是否私人物品柜true/falsefalse:允許多消費者(推薦)
autoDelete無人使用是否拆除柜子true/false臨時隊列設為true(如響應隊列)
arguments柜子附加功能Map<String,Object>實現(xiàn)高級特性:??

?? 常用arguments配置:

// 創(chuàng)建延遲隊列(通過TTL+死信交換機)
Map<String, Object> args = new HashMap<>();
args.put("x-message-ttl", 300000);       // 5分鐘過期
args.put("x-dead-letter-exchange", "dlx"); // 死信交換機
args.put("x-dead-letter-routing-key", "dead.orders"); // 死信路由鍵
// 創(chuàng)建優(yōu)先級隊列
args.put("x-max-priority", 10);          // 支持10級優(yōu)先級
// 限制隊列長度
args.put("x-max-length", 1000);          // 最多1000條消息

?? 三、隊列綁定(queueBind)

channel.queueBind(
    "email_queue",      // queue: 要綁定的隊列
    "notify_exchange",  // exchange: 交換機名稱
    "order.paid",       // routingKey: 路由鍵
    null                // arguments: 綁定參數(shù)
);

?? 參數(shù)詳解:

參數(shù)比喻解釋示例值使用場景
queue要掛靠的快遞柜“email_queue”指定目標隊列
exchange要連接的智能分揀中心“notify_exchange”選擇交換機
routingKey配送區(qū)域標簽“order.paid”消息分類的標簽(關鍵!)
arguments特殊配送條款null 或 Map特殊匹配條件(如Header匹配)

?? 根據(jù)交換機類型的路由鍵寫法:

交換機類型routingKey規(guī)則示例匹配示例
direct精確匹配“payment.success”必須完全一致
topic點分隔,支持*和#通配符“order.#.urgent”匹配"order.payment.urgent"
fanout無效(所有隊列都能收到)“” (任意值)無條件廣播

?? 四、發(fā)送消息(basicPublish)

// 構建消息屬性
AMQP.BasicProperties props = new AMQP.BasicProperties.Builder()
    .contentType("application/json")   // 內容類型
    .priority(5)                      // 優(yōu)先級(0-9)
    .deliveryMode(2)                  // 2=持久化(存硬盤)
    .expiration("60000")              // 消息60秒過期
    .build();
// 發(fā)送消息
channel.basicPublish(
    "order_exchange",   // exchange: 目標交換機
    "order.create",     // routingKey: 路由鍵
    props,              // 消息屬性(metadata)
    orderJson.getBytes() // 消息體內容(二進制)
);

?? 核心參數(shù):

參數(shù)作用重要設置建議
routingKey消息分類標簽(關鍵?。?/td>按業(yè)務設計層次結構
props控制消息行為的元數(shù)據(jù)必設deliveryMode=2(持久化)
body實際消息內容建議用JSON/Protobuf

?? 常見錯誤:

// 錯誤!直接發(fā)到隊列(繞過交換機)-> 失去路由靈活性
channel.basicPublish("", "order_queue", null, message); 
// 正確!通過交換機路由
channel.basicPublish("order_exchange", "order.create", null, message);

?? 五、消費消息(basicConsume)

// 創(chuàng)建消費者回調
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
    String message = new String(delivery.getBody(), "UTF-8");
    try {
        // 處理消息(模擬業(yè)務邏輯)
        processOrder(message);
        // 手動確認 - 業(yè)務成功完成
        channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
    } catch (Exception e) {
        // 處理失?。壕芙^消息(true=重新入隊重試)
        channel.basicReject(delivery.getEnvelope().getDeliveryTag(), true);
    }
};
// 開始消費
channel.basicConsume(
    "order_queue",   // queue: 監(jiān)聽的隊列
    false,           // autoAck: 關閉自動確認!!
    deliverCallback,  // 消息處理回調
    consumerTag -> {} // 取消訂閱時的回調(可忽略)
);

?? 關鍵參數(shù)設置:

參數(shù)作用最佳實踐
autoAck是否自動確認必須設為false(手動確認)
callback實際處理消息的函數(shù)包含成功ACK/失敗NACK邏輯

?? 消費端核心API:

// 成功處理:確認單條消息
basicAck(long deliveryTag, boolean multiple); 
// multiple: true=批量確認之前所有消息(慎用!)
// 拒絕單條消息
basicReject(long deliveryTag, boolean requeue);
// requeue: true=重新入隊(可重試), false=丟棄/進入死信
// 批量拒絕
basicNack(long deliveryTag, boolean multiple, boolean requeue);

?? 六、完整工作流示例(訂單系統(tǒng))

// =========== 生產者端 ===========
// 1. 聲明持久化直連交換機
channel.exchangeDeclare("order_exchange", "direct", true);
// 2. 聲明持久化隊列(附加死信設置)
Map<String, Object> args = new HashMap<>();
args.put("x-dead-letter-exchange", "order_dlx");
channel.queueDeclare("order_queue", true, false, false, args);
// 3. 綁定隊列到交換機
channel.queueBind("order_queue", "order_exchange", "order.create");
// 4. 發(fā)送訂單消息(持久化)
AMQP.BasicProperties props = new AMQP.BasicProperties.Builder()
        .deliveryMode(2)
        .build();
channel.basicPublish("order_exchange", "order.create", props, orderData);
// =========== 消費者端 ===========
// 1. 設置QoS:每次最多取5條(防止堆積)
channel.basicQos(5); 
// 2. 定義消息處理器
DeliverCallback callback = (tag, delivery) -> {
    try {
        handleOrder(delivery.getBody());
        channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
    } catch (BusyException e) {
        // 系統(tǒng)繁忙:延遲重試
        Thread.sleep(5000);
        channel.basicReject(deliveryTag, true); 
    } catch (FatalException e) {
        // 致命錯誤:不再重試(進入死信)
        channel.basicReject(deliveryTag, false); 
    }
};
// 3. 開始消費(手動確認)
channel.basicConsume("order_queue", false, callback, tag -> {});

?? 關鍵實踐總結

持久化三位一體

exchangeDeclare(..., true, ...)     // 交換機持久化
queueDeclare(..., true, ...)        // 隊列持久化
basicPublish(..., props.setDeliveryMode(2), ...) // 消息持久化

消費端防護措施

basicConsume(..., false, ...)       // 禁用autoAck
basicQos(prefetchCount)              // 設置預取數(shù)量

錯誤處理策略

// 網(wǎng)絡重連
factory.setAutomaticRecoveryEnabled(true); 
// 業(yè)務重試
basicReject(..., true); // 重新入隊
// 死信隊列兜底
basicReject(..., false); 

性能優(yōu)化技巧

// 開啟批量確認(減少IO)
channel.basicAck(lastDeliveryTag, true); 
// 使用Publisher Confirms(生產端)
channel.confirmSelect();

掌握這些核心函數(shù)和參數(shù)設計,您就能構建出穩(wěn)定可靠的RabbitMQ消息系統(tǒng)!有任何具體使用問題,歡迎繼續(xù)討論。

到此這篇關于RabbitMQ核心函數(shù)的參數(shù)意義和使用場景的文章就介紹到這了,更多相關RabbitMQ核心函數(shù)使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mybatis分步查詢的實現(xiàn)示例

    Mybatis分步查詢的實現(xiàn)示例

    本文主要介紹了Mybatis分步查詢的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Java Web項目部署在Tomcat運行出錯與解決方法示例

    Java Web項目部署在Tomcat運行出錯與解決方法示例

    這篇文章主要介紹了Java Web項目部署在Tomcat運行出錯與解決方法,結合具體實例形式分析了Java Web項目部署在Tomcat過程中由于xml配置文件導致的錯誤問題常見提示與解決方法,需要的朋友可以參考下
    2017-03-03
  • 關于intellij idea打開就閃退或關閉詳細解決辦法

    關于intellij idea打開就閃退或關閉詳細解決辦法

    這篇文章主要介紹了關于intellij idea打開就閃退或關閉詳細解決辦法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 如何使用IDEA創(chuàng)建MAPPER模板過程圖解

    如何使用IDEA創(chuàng)建MAPPER模板過程圖解

    這篇文章主要介紹了如何使用IDEA創(chuàng)建MAPPER模板,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 全面解析Spring Security 內置 Filter

    全面解析Spring Security 內置 Filter

    這篇文章主要介紹了Spring Security 內置 Filter的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • jtds1.1連接sqlserver2000測試示例

    jtds1.1連接sqlserver2000測試示例

    這篇文章主要介紹了jtds1.1連接sqlserver2000測試示例,需要的朋友可以參考下
    2014-02-02
  • MybatisPlus公共字段自動注入方法實現(xiàn)

    MybatisPlus公共字段自動注入方法實現(xiàn)

    本文介紹了MybatisPlus公共字段自動注入方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-08-08
  • SpringBoot實現(xiàn)接口防抖的實戰(zhàn)方案大全

    SpringBoot實現(xiàn)接口防抖的實戰(zhàn)方案大全

    這篇文章主要介紹了四種在SpringBoot中實現(xiàn)接口防抖的方案,包括前端防抖+后端令牌鎖、數(shù)據(jù)庫唯一約束、本地Guava緩存和Token令牌機制,每種方案都有其優(yōu)缺點,選擇時應根據(jù)業(yè)務重要性和系統(tǒng)架構來決定,需要的朋友可以參考下
    2025-12-12
  • 全面詳解java代碼重構與設計模式

    全面詳解java代碼重構與設計模式

    這篇文章主要為大家介紹了全面詳解java代碼重構與設計模式的全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 基于Java swing組件實現(xiàn)簡易計算器

    基于Java swing組件實現(xiàn)簡易計算器

    這篇文章主要介紹了基于Java swing組件實現(xiàn)簡易計算器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04

最新評論

婺源县| 小金县| 河西区| 丘北县| 盱眙县| 铅山县| 饶河县| 仙居县| 利辛县| 青州市| 光山县| 沂南县| 蓬莱市| 松原市| 铁岭市| 千阳县| 楚雄市| 宁南县| 南丹县| 资溪县| 建德市| 佳木斯市| 海口市| 永川市| 伊吾县| 盐边县| 郓城县| 阳泉市| 庆城县| 河源市| 鄂温| 邛崃市| 望奎县| 石渠县| 柳江县| 屯门区| 卓尼县| 大余县| 湾仔区| 龙岩市| 华坪县|