国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

三分鐘學(xué)會(huì)在 RabbitMQ 中實(shí)現(xiàn)發(fā)布訂閱模式

開發(fā) 前端
掌握發(fā)布-訂閱模式和消息發(fā)送失敗處理策略,對(duì)于掌握消息隊(duì)列的使用至關(guān)重要,可為系統(tǒng)的穩(wěn)定性和擴(kuò)展性提供保障。

在這個(gè)充滿挑戰(zhàn)和收獲的60天學(xué)習(xí)之旅中,你將迅速提升成為一名全棧工程師。專注于Spring Boot框架,我們將深入研究高級(jí)特性,從項(xiàng)目初始化到微服務(wù)架構(gòu),再到性能優(yōu)化和持續(xù)集成部署。無(wú)論你是初學(xué)者還是有一定經(jīng)驗(yàn)的開發(fā)者,這個(gè)專題都將帶你穿越從零到全面掌握Spring Boot的學(xué)習(xí)曲線。

Day 32 ~ Springboot3.1.x|3分鐘學(xué)會(huì)在 RabbitMQ 中實(shí)現(xiàn)發(fā)布訂閱模式

實(shí)現(xiàn)發(fā)布與訂閱消息模式

發(fā)布-訂閱模式是一種消息傳遞方式,其中發(fā)送者(發(fā)布者)不會(huì)將消息直接發(fā)送到特定的接收者(訂閱者)。發(fā)布者類別定義了哪些訂閱者因?yàn)橛嗛喺咂ヅ淞税l(fā)布者的類別而接收消息。

以下是使用RabbitMQ實(shí)現(xiàn)發(fā)布-訂閱模式的一種例子,我們將使用RabbitMQ的Fanout Exchange。

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"),我們聲明一個(gè)名為"log"的exchange,同時(shí)我們定義其類型為"fanout",意味著它會(huì)將接收到的所有消息廣播給所有它所知道的隊(duì)列。

Consumer

每一個(gè)訂閱者都需要擁有一個(gè)queue,因此,我們需要在客戶端中創(chuàng)建queue。

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 -> { });
  }
}

在這個(gè)例子中,我們聲明一個(gè)新的queue,并將其與"logs"的exchange綁定。然后我們定義了消息的接收以及處理方式。

處理消息發(fā)送失敗的情況

在使用消息中間件的過(guò)程中,消息發(fā)送失敗是無(wú)法避免的情況。因此,我們需要對(duì)此進(jìn)行正確的處理以避免因此而導(dǎo)致的系統(tǒng)問題。

對(duì)于消息發(fā)送失敗的處理,有以下幾種常用的方案:

  • 重試: 對(duì)于有些暫時(shí)的問題,比如網(wǎng)絡(luò)波動(dòng),可以通過(guò)簡(jiǎn)單的重試來(lái)解決。
  • 消息持久化:將消息存儲(chǔ)在某處(例如數(shù)據(jù)庫(kù)),只有當(dāng)消息成功發(fā)送后,再刪除它。
  • 死信隊(duì)列:把無(wú)法處理的消息放入"死信隊(duì)列",然后由專門的消費(fèi)者來(lái)進(jìn)行處理。

RabbitMQ中的消息確認(rèn)(publisher confirms)和消費(fèi)者應(yīng)答(Consumer Acknowledgements)就是為了解決此類問題。

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("消息發(fā)送失敗");
        }
    } catch (Exception e) {
        System.out.println("錯(cuò)誤: " + e.getMessage());
    }
}

上述代碼中執(zhí)行channel.confirmSelect();后,當(dāng)前channel被設(shè)置為publisher confirm模式。在此模式下,當(dāng)消息被RabbitMQ成功接收后,會(huì)發(fā)送一個(gè)確認(rèn)給生產(chǎn)者。如果RabbitMQ沒有發(fā)送確認(rèn),那么生產(chǎn)者可以認(rèn)定該消息發(fā)送失敗。

結(jié)論:掌握發(fā)布-訂閱模式和消息發(fā)送失敗處理策略,對(duì)于掌握消息隊(duì)列的使用至關(guān)重要,可為系統(tǒng)的穩(wěn)定性和擴(kuò)展性提供保障。

責(zé)任編輯:武曉燕 來(lái)源: 路條編程
相關(guān)推薦

2024-04-01 09:59:08

消息隊(duì)列通信微服務(wù)

2009-10-26 19:09:50

VB.NET轉(zhuǎn)換形態(tài)

2009-11-17 10:13:29

PHP正則表達(dá)式

2024-03-07 07:38:59

微服務(wù)HTTP客戶端

2021-10-22 09:09:43

Windows 11操作系統(tǒng)微軟

2025-02-12 12:45:06

2024-03-11 09:03:12

客戶端負(fù)載均衡Ribbon

2024-04-02 08:27:19

異步任務(wù)抽象

2021-09-16 10:29:05

開發(fā)技能代碼

2024-05-16 11:13:16

Helm工具release

2024-12-18 10:24:59

代理技術(shù)JDK動(dòng)態(tài)代理

2009-11-09 12:55:43

WCF事務(wù)

2019-08-29 20:10:03

U盤系統(tǒng)Windows 10

2009-11-03 17:15:07

VB.NET開發(fā)Exc

2021-04-20 13:59:37

云計(jì)算

2023-12-27 08:15:47

Java虛擬線程

2024-08-30 08:50:00

2024-01-16 07:46:14

FutureTask接口用法

2022-02-17 09:24:11

TypeScript編程語(yǔ)言javaScrip

2024-06-06 08:50:43

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美激情亚洲国产| 成人中文字幕视频| 91网在线播放| 伊人色**天天综合婷婷| 亚洲欧美另类图片小说| 日韩免费观看网站| 亚洲精品伦理| 亚洲国产综合人成综合网站| aaa免费在线观看| 日韩久久视频| 欧美插天视频在线播放| 性欧美videos高清hd4k| 欧美性生交大片免费| 孩娇小videos精品| 成人一区二区三区视频在线观看| 狠狠色狠狠色综合人人| 精品不卡一区| 韩国三级日本三级少妇99| 51一区二区三区| 亚洲福利在线播放| 福利在线播放| 午夜久久久久久| 国产精品一区二区小说| 福利一区二区在线| 国产又爽又黄ai换脸| 久久久久久久欧美精品| 国产伦理久久久| 66久久国产| 国产在线精品一区免费香蕉| 在线看成人短视频| 97久久精品在线| aaa国产精品视频| 欧美xxxx14xxxxx性爽| 日韩av影片| 亚洲电影中文字幕| 日本高清在线观看视频| 欧美电影精品一区二区| 中国av在线播放| 日韩一级片在线观看| 免费大片黄在线观看视频网站| 欧美日韩精品在线播放| 在线麻豆国产传媒1国产免费| 一区二区三区高清| 中文字幕亚洲精品视频| 色综合天天天天做夜夜夜夜做| 116美女写真午夜一级久久| 亚洲激情图片qvod| av女同在线| 色综合天天在线| 麻豆视频在线播放| 亚洲国产天堂久久国产91| 亚洲少妇视频| 色七七影院综合| 日韩黄色在线| 国内成人精品一区| 国产成人ay| 成人黄动漫网站免费| 亚洲小说区图片区| 免费国产一区二区| 国产成人日日夜夜| 日韩福利视频在线| 亚洲高清在线精品| 99中文字幕一区| 亚洲国内高清视频| 日韩色性视频| 国产成人久久精品| 亚洲国产91| 成人一区二区av| 国产肉丝袜一区二区| 一级黄色av| 欧美日韩中国免费专区在线看| 色的视频在线免费看| 亚洲精品999| 一区二区视频| 91香蕉亚洲精品| 久久一本综合频道| 你懂的免费在线观看| 国产性色一区二区| 欧美色片在线观看| 成人精品一区二区三区电影黑人| 国内一区二区三区| 波多野结衣av在线| 欧洲日本亚洲国产区| 26uuu亚洲综合色欧美| 1024在线视频| 伊人av综合网| 欧美在线观看禁18| 手机在线一区二区三区| 成人高清在线| 精品久久一二三| 91精品视频在线播放| 大白屁股一区二区视频| 国产亚洲观看| 1区2区在线观看| 日韩国产成人无码av毛片| 久久亚洲国产精品| 在线一区二区视频| 欧洲亚洲精品久久久久| 亚洲欧美日韩综合一区| 一色桃子久久精品亚洲| 蜜臀av国内免费精品久久久夜夜| 精品一区2区三区| 欧美日韩精品在线播放| 超碰在线免费播放| 国产精品久久久久久久久久久久久 | 亚洲第一中文字幕在线观看| 成人国产精品免费观看视频| 少妇一区二区三区| 黄色网址视频在线观看| 青青草原一区二区| 色成年激情久久综合| 国产在线精品免费| 一区在线免费| 天堂va在线高清一区| 欧美日韩国产小视频| 日韩区国产区| 久久成人精品电影| 欧美性生交大片免网| 麻豆传媒一区二区三区| av在线电影免费观看| 欧美一级免费看| 日本一区二区三区四区在线视频 | 66国产精品| 在线观看a级片| 在线观看av影片| 噜噜噜噜噜久久久久久91| 久久精品国产久精国产一老狼| 欧美曰成人黄网| 久久精品人人做人人综合 | 成人狠狠色综合| 亚洲国产精品一区二区三区| 色爱综合av| 成人中文字幕在线播放| 欧美一区二区视频网站| 成人免费看片39| 成人免费视频久久| 在线色欧美三级视频| 日韩成人免费在线| 米奇777四色精品人人爽| 日本伊人精品一区二区三区介绍 | 亚洲精品国产首次亮相| www.99热.com| 日韩中文字幕在线视频| 奇米影视一区二区三区小说| www.av在线播放| 国产精品一区二区久久国产| 国产精品久久久久一区| 国产亚洲精品精品国产亚洲综合| 欧美成人在线免费观看| 在线免费av一区| 国产国产精品| 福利网址在线| 日韩av片免费在线观看| 国产精品日韩精品欧美在线| 亚洲日本中文| 久久黄色片视频| www.亚洲人.com| av资源站一区| 动漫一区二区三区| 成人在线观看a| 欧美精品情趣视频| 久久综合九色综合欧美就去吻| 国产麻豆一区| 2022亚洲天堂| 欧美激情一二三| 中文字幕久久午夜不卡| 色爱综合av| 羞羞视频网站在线免费观看| 国产成人激情视频| 性欧美大战久久久久久久久| 成人一区而且| 毛片在线播放网站| 国语精品免费视频| 亚洲国产精品美女| 国产91精品露脸国语对白| 外国电影一区二区| 欧美一级片中文字幕 | 一级日本在线| 欧洲精品亚洲精品| 国产视频精品免费播放| 成人av一区二区三区| 视频精品一区| 美女的诞生在线观看高清免费完整版中文| 国产精品爱啪在线线免费观看| 性做久久久久久久免费看| 99久久婷婷国产综合精品电影√| 色播在线观看| 国产中文一区二区| 精品一区精品二区| 国产精品乱子久久久久| 亚洲第一偷拍| 国产羞羞视频在线播放| 伊人成色综合网| 91高清在线免费观看| 色狠狠av一区二区三区| 麻豆国产精品官网| 日韩一区免费| av在线播放免费| 成人午夜免费在线| 国产欧美在线视频|