日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

三分鐘學會在 RabbitMQ 中實現發布訂閱模式

來源: 責編: 時間:2024-03-28 09:28:45 189觀看
導讀在這個充滿挑戰和收獲的60天學習之旅中,你將迅速提升成為一名全棧工程師。專注于Spring Boot框架,我們將深入研究高級特性,從項目初始化到微服務架構,再到性能優化和持續集成部署。無論你是初學者還是有一定經驗的開發者,

在這個充滿挑戰和收獲的60天學習之旅中,你將迅速提升成為一名全棧工程師。專注于Spring Boot框架,我們將深入研究高級特性,從項目初始化到微服務架構,再到性能優化和持續集成部署。無論你是初學者還是有一定經驗的開發者,這個專題都將帶你穿越從零到全面掌握Spring Boot的學習曲線。UI928資訊網——每日最新資訊28at.com

UI928資訊網——每日最新資訊28at.com

Day 32 ~ Springboot3.1.x|3分鐘學會在 RabbitMQ 中實現發布訂閱模式UI928資訊網——每日最新資訊28at.com

實現發布與訂閱消息模式

發布-訂閱模式是一種消息傳遞方式,其中發送者(發布者)不會將消息直接發送到特定的接收者(訂閱者)。發布者類別定義了哪些訂閱者因為訂閱者匹配了發布者的類別而接收消息。UI928資訊網——每日最新資訊28at.com

以下是使用RabbitMQ實現發布-訂閱模式的一種例子,我們將使用RabbitMQ的Fanout Exchange。UI928資訊網——每日最新資訊28at.com

Producer

import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import java.nio.charset.StandardCharsets;public class EmitLog {  private static final String EXCHANGE_NAME = "logs";  public static void main(String[] argv) throws Exception {    ConnectionFactory factory = new ConnectionFactory();    factory.setHost("localhost");    try (Connection connection = factory.newConnection();         Channel channel = connection.createChannel()) {        channel.exchangeDeclare(EXCHANGE_NAME, "fanout");        String message = "Log message...";        channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes(StandardCharsets.UTF_8));        System.out.println("Sent '" + message + "'");    }  }}

在上述代碼的channel.exchangeDeclare(EXCHANGE_NAME, "fanout"),我們聲明一個名為"log"的exchange,同時我們定義其類型為"fanout",意味著它會將接收到的所有消息廣播給所有它所知道的隊列。UI928資訊網——每日最新資訊28at.com

Consumer

每一個訂閱者都需要擁有一個queue,因此,我們需要在客戶端中創建queue。UI928資訊網——每日最新資訊28at.com

import com.rabbitmq.client.*;import java.io.IOException;public class ReceiveLogs {  private static final String EXCHANGE_NAME = "logs";  public static void main(String[] argv) throws Exception {    ConnectionFactory factory = new ConnectionFactory();    factory.setHost("localhost");    Connection connection = factory.newConnection();    Channel channel = connection.createChannel();    channel.exchangeDeclare(EXCHANGE_NAME, "fanout");    String queueName = channel.queueDeclare().getQueue();    channel.queueBind(queueName, EXCHANGE_NAME, "");    DeliverCallback deliverCallback = (consumerTag, delivery) -> {        String message = new String(delivery.getBody(), StandardCharsets.UTF_8);        System.out.println("Received '" + message + "'");    };    channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { });  }}

在這個例子中,我們聲明一個新的queue,并將其與"logs"的exchange綁定。然后我們定義了消息的接收以及處理方式。UI928資訊網——每日最新資訊28at.com

處理消息發送失敗的情況

在使用消息中間件的過程中,消息發送失敗是無法避免的情況。因此,我們需要對此進行正確的處理以避免因此而導致的系統問題。UI928資訊網——每日最新資訊28at.com

對于消息發送失敗的處理,有以下幾種常用的方案:UI928資訊網——每日最新資訊28at.com

  • 重試: 對于有些暫時的問題,比如網絡波動,可以通過簡單的重試來解決。
  • 消息持久化:將消息存儲在某處(例如數據庫),只有當消息成功發送后,再刪除它。
  • 死信隊列:把無法處理的消息放入"死信隊列",然后由專門的消費者來進行處理。

RabbitMQ中的消息確認(publisher confirms)和消費者應答(Consumer Acknowledgements)就是為了解決此類問題。UI928資訊網——每日最新資訊28at.com

ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");try (Connection connection = factory.newConnection()) {    Channel channel = connection.createChannel();    String queueName = "test";    String message = "Hello world";    try {        channel.queueDeclare(queueName, false, false, false, null);        channel.confirmSelect();        channel.basicPublish("", queueName, null, message.getBytes());        if (!channel.waitForConfirms()) {            System.out.println("消息發送失敗");        }    } catch (Exception e) {        System.out.println("錯誤: " + e.getMessage());    }}

上述代碼中執行channel.confirmSelect();后,當前channel被設置為publisher confirm模式。在此模式下,當消息被RabbitMQ成功接收后,會發送一個確認給生產者。如果RabbitMQ沒有發送確認,那么生產者可以認定該消息發送失敗。UI928資訊網——每日最新資訊28at.com

結論:掌握發布-訂閱模式和消息發送失敗處理策略,對于掌握消息隊列的使用至關重要,可為系統的穩定性和擴展性提供保障。UI928資訊網——每日最新資訊28at.com

UI928資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-79990-0.html三分鐘學會在 RabbitMQ 中實現發布訂閱模式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: SpringCloud項目開發中實用技巧總結

下一篇: 2024 年,這些 VS Code 插件可以卸載了!

標簽:
  • 熱門焦點
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經過去,最明顯的肯定就是大內存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業務來說可快速實現自動化的上手工作。Selenium IDEKat
  • 分布式系統中的CAP理論,面試必問,你理解了嘛?

    對于剛剛接觸分布式系統的小伙伴們來說,一提起分布式系統,就感覺高大上,深不可測。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • 得物寵物生意「狂飆」,發力“它經濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內的“在線鑒別”,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節,就能收獲擁有專業資質認證的得物鑒
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 信通院:小米、華為等11家應用商店基本完成APP簽名及驗簽工作

    中國信通院表示,目前,小米、華為、OPPO、vivo、360手機助手、百度手機助手、應用寶、豌豆莢和努比亞等9家應用商店,以及抖音和快手2家新型應用分發平
  • 聯想YOGA 16s 2022筆記本將要推出,屏幕支持觸控功能

    聯想此前宣布,將于11月2日19:30召開聯想秋季輕薄新品發布會,推出聯想 YOGA 16s 2022 筆記本等新品。官方稱,YOGA 16s 2022 筆記本將搭載 16 英寸屏幕,并且是一
Top 主站蜘蛛池模板: 青川县| 洛扎县| 苏尼特左旗| 阜城县| 久治县| 乌兰察布市| 徐汇区| 鹤峰县| 门头沟区| 昆山市| 康平县| 扎鲁特旗| 岳西县| 宝兴县| 南阳市| 祥云县| 双辽市| 怀集县| 大方县| 灌阳县| 巩留县| 密山市| 滦南县| 文水县| 通州市| 横山县| 镇赉县| 温宿县| 松潘县| 乌拉特前旗| 泗阳县| 苗栗县| 新余市| 古田县| 嘉义市| 咸宁市| 夏邑县| 耒阳市| 南昌县| 昭觉县| 离岛区|