国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RabbitMQ工作模式-路由模式

這篇具有很好參考價(jià)值的文章主要介紹了RabbitMQ工作模式-路由模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

官方文檔參考:https://www.rabbitmq.com/tutorials/tutorial-four-python.html
RabbitMQ工作模式-路由模式,rabbitmq,學(xué)習(xí)筆記,JAVA,rabbitmq,java,java-rabbitmq

使用direct類型的Exchange,發(fā)N條消息并使用不同的routingKey,消費(fèi)者定義隊(duì)列并將隊(duì)列routingKey、Exchange綁定。此時(shí)使用direct模式Exchange必須要routingKey完成匹配的情況下消息才會(huì)轉(zhuǎn)發(fā)到對(duì)應(yīng)的隊(duì)列中被消費(fèi)。

樣例使用日志分發(fā)為樣例。即按日志不同的級(jí)別,分發(fā)到不同的隊(duì)列。每個(gè)隊(duì)列只處理自己的對(duì)應(yīng)的級(jí)別日志。

創(chuàng)建生產(chǎn)者

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.nio.charset.StandardCharsets;
import java.util.concurrent.ThreadLocalRandom;

public class Product {

  private static final String[] LOG_LEVEL = {"ERROR", "WARN", "INFO"};

  public static void main(String[] args) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setUri("amqp://root:123456@node1:5672/%2f");

    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    // 聲明交換機(jī),交換器和消息隊(duì)列的綁定不需要在這里處理。
    channel.exchangeDeclare(
        "ex.routing",
        BuiltinExchangeType.DIRECT,
        // 持久的標(biāo)識(shí)
        false,
        // 自動(dòng)刪除的標(biāo)識(shí)
        false,
        // 屬性
        null);

    for (int i = 0; i < 30; i++) {
      String level = LOG_LEVEL[ThreadLocalRandom.current().nextInt(0, LOG_LEVEL.length)];
      String dataMsg = "[" + level + "] 消息發(fā)送 :" + i;
      // 發(fā)送消息
      channel.basicPublish("ex.routing", level, null, dataMsg.getBytes(StandardCharsets.UTF_8));
    }
  }
}

創(chuàng)建ERROR的消費(fèi)者

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.nio.charset.StandardCharsets;

public class ErrorConsumer {

  public static void main(String[] args) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setUri("amqp://root:123456@node1:5672/%2f");

    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    // 聲明隊(duì)列并綁定
    channel.exchangeDeclare(
        "ex.routing",
        BuiltinExchangeType.DIRECT,
        // 持久的標(biāo)識(shí)
        false,
        // 自動(dòng)刪除的標(biāo)識(shí)
        false,
        // 屬性
        null);

    // 此也可以聲明為臨時(shí)隊(duì)列,但是如果消息很重要,不要聲明臨時(shí)隊(duì)列。
    channel.queueDeclare(
        "log.error",
        // 永久
        false,
        // 排他
        false,
        // 自動(dòng)刪除
        true,
        // 屬性
        null);

    //消費(fèi)者享有綁定到交換器的權(quán)力。
    channel.queueBind("log.error", "ex.routing", "ERROR");

    // 通過(guò)chanel消費(fèi)消息
    channel.basicConsume(
        "log.error",
        (consumerTag, message) -> {
          System.out.println("ERROR收到的消息:" + new String(message.getBody(), StandardCharsets.UTF_8));
        },
        consumerTag -> {});
  }
}

創(chuàng)建INFO級(jí)的消費(fèi)者

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.nio.charset.StandardCharsets;

public class InfoConsumer {

  public static void main(String[] args) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setUri("amqp://root:123456@node1:5672/%2f");

    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    // 聲明隊(duì)列并綁定
    channel.exchangeDeclare(
        "ex.routing",
        BuiltinExchangeType.DIRECT,
        // 持久的標(biāo)識(shí)
        false,
        // 自動(dòng)刪除的標(biāo)識(shí)
        true,
        // 屬性
        null);

    // 此也可以聲明為臨時(shí)隊(duì)列,但是如果消息很重要,不要聲明臨時(shí)隊(duì)列。
    channel.queueDeclare(
        "log.info",
        // 永久
        false,
        // 排他
        false,
        // 自動(dòng)刪除
        false,
        // 屬性
        null);

    //消費(fèi)者享有綁定到交換器的權(quán)力。
    channel.queueBind("log.info", "ex.routing", "INFO");

    // 通過(guò)chanel消費(fèi)消息
    channel.basicConsume(
        "log.info",
        (consumerTag, message) -> {
          System.out.println("INFO收到的消息:" + new String(message.getBody(), StandardCharsets.UTF_8));
        },
        consumerTag -> {});
  }
}

創(chuàng)建WARN級(jí)別的消息者

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.nio.charset.StandardCharsets;

public class WarnConsumer {

  public static void main(String[] args) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setUri("amqp://root:123456@node1:5672/%2f");

    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    // 聲明隊(duì)列并綁定
    channel.exchangeDeclare(
        "ex.routing",
        BuiltinExchangeType.DIRECT,
        // 持久的標(biāo)識(shí)
        false,
        // 自動(dòng)刪除的標(biāo)識(shí)
        false,
        // 屬性
        null);

    // 此也可以聲明為臨時(shí)隊(duì)列,但是如果消息很重要,不要聲明臨時(shí)隊(duì)列。
    channel.queueDeclare(
        "log.warn",
        // 永久
        false,
        // 排他
        false,
        // 自動(dòng)刪除
        true,
        // 屬性
        null);

    //消費(fèi)者享有綁定到交換器的權(quán)力。
    channel.queueBind("log.warn", "ex.routing", "WARN");

    // 通過(guò)chanel消費(fèi)消息
    channel.basicConsume(
        "log.warn",
        (consumerTag, message) -> {
          System.out.println("warn收到的消息:" + new String(message.getBody(), StandardCharsets.UTF_8));
        },
        consumerTag -> {});
  }
}

首先啟動(dòng)三個(gè)消費(fèi)者:

查看隊(duì)列及交換機(jī)情況

[root@nullnull-os ~]# rabbitmqctl list_exchanges --formatter pretty_table
Listing exchanges for vhost / ...
┌────────────────────┬─────────┐
│ name               │ type    │
├────────────────────┼─────────┤
│ amq.fanout         │ fanout  │
├────────────────────┼─────────┤
│ amq.rabbitmq.trace │ topic   │
├────────────────────┼─────────┤
│ amq.headers        │ headers │
├────────────────────┼─────────┤
│ amq.topic          │ topic   │
├────────────────────┼─────────┤
│ amq.direct         │ direct  │
├────────────────────┼─────────┤
│                    │ direct  │
├────────────────────┼─────────┤
│ ex.routing         │ direct  │
├────────────────────┼─────────┤
│ amq.match          │ headers │
└────────────────────┴─────────┘
[root@nullnull-os ~]# rabbitmqctl list_bindings --formatter pretty_table
Listing bindings for vhost /...
┌─────────────┬─────────────┬──────────────────┬──────────────────┬─────────────┬───────────┐
│ source_name │ source_kind │ destination_name │ destination_kind │ routing_key │ arguments │
├─────────────┼─────────────┼──────────────────┼──────────────────┼─────────────┼───────────┤
│             │ exchange    │ log.info         │ queue            │ log.info    │           │
├─────────────┼─────────────┼──────────────────┼──────────────────┼─────────────┼───────────┤
│             │ exchange    │ log.warn         │ queue            │ log.warn    │           │
├─────────────┼─────────────┼──────────────────┼──────────────────┼─────────────┼───────────┤
│             │ exchange    │ log.error        │ queue            │ log.error   │           │
├─────────────┼─────────────┼──────────────────┼──────────────────┼─────────────┼───────────┤
│ ex.routing  │ exchange    │ log.error        │ queue            │ ERROR       │           │
├─────────────┼─────────────┼──────────────────┼──────────────────┼─────────────┼───────────┤
│ ex.routing  │ exchange    │ log.info         │ queue            │ INFO        │           │
├─────────────┼─────────────┼──────────────────┼──────────────────┼─────────────┼───────────┤
│ ex.routing  │ exchange    │ log.warn         │ queue            │ WARN        │           │
└─────────────┴─────────────┴──────────────────┴──────────────────┴─────────────┴───────────┘
[root@nullnull-os ~]# 

可以發(fā)現(xiàn),交換器ex.routing 綁定了三個(gè)隊(duì)列log.error、log.info log.warn并指定了路由鍵。

啟動(dòng)消費(fèi)者,查看消息通否被正常消費(fèi)。

ERROR的消費(fèi)者控制臺(tái)輸出

ERROR收到的消息:[ERROR] 消息發(fā)送 :1
ERROR收到的消息:[ERROR] 消息發(fā)送 :2
ERROR收到的消息:[ERROR] 消息發(fā)送 :6
ERROR收到的消息:[ERROR] 消息發(fā)送 :8
ERROR收到的消息:[ERROR] 消息發(fā)送 :9
ERROR收到的消息:[ERROR] 消息發(fā)送 :11
ERROR收到的消息:[ERROR] 消息發(fā)送 :15
ERROR收到的消息:[ERROR] 消息發(fā)送 :16
ERROR收到的消息:[ERROR] 消息發(fā)送 :19
ERROR收到的消息:[ERROR] 消息發(fā)送 :20
ERROR收到的消息:[ERROR] 消息發(fā)送 :21
ERROR收到的消息:[ERROR] 消息發(fā)送 :23
ERROR收到的消息:[ERROR] 消息發(fā)送 :24
ERROR收到的消息:[ERROR] 消息發(fā)送 :27
ERROR收到的消息:[ERROR] 消息發(fā)送 :28

INFO的消費(fèi)者控制臺(tái)輸出:

INFO收到的消息:[INFO] 消息發(fā)送 :0
INFO收到的消息:[INFO] 消息發(fā)送 :3
INFO收到的消息:[INFO] 消息發(fā)送 :4
INFO收到的消息:[INFO] 消息發(fā)送 :13
INFO收到的消息:[INFO] 消息發(fā)送 :14
INFO收到的消息:[INFO] 消息發(fā)送 :22
INFO收到的消息:[INFO] 消息發(fā)送 :25

WARN的消費(fèi)都控制臺(tái)輸出:

warn收到的消息:[WARN] 消息發(fā)送 :5
warn收到的消息:[WARN] 消息發(fā)送 :7
warn收到的消息:[WARN] 消息發(fā)送 :10
warn收到的消息:[WARN] 消息發(fā)送 :12
warn收到的消息:[WARN] 消息發(fā)送 :17
warn收到的消息:[WARN] 消息發(fā)送 :18
warn收到的消息:[WARN] 消息發(fā)送 :26
warn收到的消息:[WARN] 消息發(fā)送 :29

至此,驗(yàn)證已經(jīng)完成。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-691625.html

到了這里,關(guān)于RabbitMQ工作模式-路由模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • RabbitMQ五大常用工作模式

    RabbitMQ五大常用工作模式

    消息生產(chǎn)者 消息消費(fèi)者(會(huì)一直監(jiān)聽(tīng)隊(duì)列) 工作隊(duì)列 消息生產(chǎn)能力大于消費(fèi)能力,增加多個(gè)消費(fèi)節(jié)點(diǎn) 和簡(jiǎn)單隊(duì)列類似,增加多個(gè)消費(fèi)節(jié)點(diǎn),處于競(jìng)爭(zhēng)關(guān)系 默認(rèn)策略:round robin輪訓(xùn) 生產(chǎn)者 消費(fèi)者1 消費(fèi)者2 輪訓(xùn)策略驗(yàn)證 先啟動(dòng)兩個(gè)消費(fèi)者,再啟動(dòng)生產(chǎn)者 缺點(diǎn):存在部分節(jié)點(diǎn)

    2024年02月19日
    瀏覽(23)
  • RabbitMQ:工作隊(duì)列模式

    RabbitMQ:工作隊(duì)列模式

    ??個(gè)人主頁(yè):不斷前進(jìn)的皮卡丘 ??博客描述:夢(mèng)想也許遙不可及,但重要的是追夢(mèng)的過(guò)程,用博客記錄自己的成長(zhǎng),記錄自己一步一步向上攀登的印記 ??個(gè)人專欄:消息中間件 工作隊(duì)列(又名: 任務(wù)隊(duì)列 )背后的主要思想是避免立即執(zhí)行資源密集型任務(wù)并等待其完成。相反

    2024年01月23日
    瀏覽(26)
  • RabbitMQ 工作模式介紹

    RabbitMQ 工作模式介紹

    RabbitMQ 是一個(gè)消息代理:它接受并轉(zhuǎn)發(fā)消息。您可以將其視為郵局:當(dāng)您將要郵寄的郵件放入郵箱時(shí),您可以確定信使最終會(huì)將郵件交付給您的收件人。在這個(gè)類比中,RabbitMQ是一個(gè)郵政信箱,一個(gè)郵局和一個(gè)信件載體。 RabbitMQ 和郵局之間的主要區(qū)別在于它不處理紙張,而是

    2024年02月06日
    瀏覽(55)
  • RabbitMQ的工作模式

    RabbitMQ 的工作模式 一 .simple 模式(即最簡(jiǎn)單的收發(fā)模式) 二 .work 工作模式 ( 資源的競(jìng)爭(zhēng) ) publish_subscribe 發(fā)布訂閱 (../../../../../0 馬士兵 / 新建文件夾 /BAT 面試突擊資料 (1)/ 整理 /BAT 面試突擊資料 /15- 消息中間件 MQ 面試題( 2020 最新 版) .assets/publish_subscribe 發(fā)布訂閱 ( 共享資

    2024年02月06日
    瀏覽(14)
  • 【RabbitMQ】Spring整合RabbitMQ、Spring實(shí)現(xiàn)RabbitMQ五大工作模式(萬(wàn)字長(zhǎng)文)

    【RabbitMQ】Spring整合RabbitMQ、Spring實(shí)現(xiàn)RabbitMQ五大工作模式(萬(wàn)字長(zhǎng)文)

    目錄 一、準(zhǔn)備 1、創(chuàng)建maven項(xiàng)目?編輯 2、引入依賴 3、創(chuàng)建配置文件 1.RabbitMQ配置文件 2.生產(chǎn)者項(xiàng)目配置文件 3.消費(fèi)者項(xiàng)目配置文件 二、生產(chǎn)者xml中文件創(chuàng)建隊(duì)列 三、生產(chǎn)者xml文件中創(chuàng)建交換機(jī)以及綁定隊(duì)列 1、創(chuàng)建交換機(jī) 2、綁定隊(duì)列? 四、消費(fèi)者xml文件中創(chuàng)建隊(duì)列消息監(jiān)

    2024年01月21日
    瀏覽(20)
  • 消息隊(duì)列之RabbitMQ工作模式

    提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動(dòng)添加 消息隊(duì)列之RabbitMQ工作模式 提示:寫完文章后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: 在這篇博客中,我將深入探討 RabbitMQ 的工作模式,帶你

    2024年01月18日
    瀏覽(114)
  • RabbitMQ的6種工作模式

    RabbitMQ的6種工作模式

    官方文檔: http://www.rabbitmq.com/ https://www.rabbitmq.com/getstarted.html RabbitMQ 常見(jiàn)的 6 種工作模式: 1)、消息產(chǎn)生后將消息放入隊(duì)列。 2)、消息的消費(fèi)者監(jiān)聽(tīng)消息隊(duì)列,如果隊(duì)列中有消息,就消費(fèi)掉,消息被拿走后,自動(dòng)從隊(duì)列中刪除。 3)、存在的問(wèn)題:消息可能沒(méi)有被消費(fèi)者正確處

    2024年02月14日
    瀏覽(12)
  • RabbitMQ消息隊(duì)列的工作模式

    官方文檔地址:https://www.rabbitmq.com/getstarted.html 工作模式其實(shí)就是消息隊(duì)列分發(fā)消息的路由方式。 RabbitMQ常用的幾種工作模式: 簡(jiǎn)單模式 WorkQueues工作隊(duì)列模式 PubSub生產(chǎn)者/PubSub消費(fèi)者模式 Routing路由模式 Topics通配符模式 發(fā)布/訂閱模式(Publish/Subscribe):該模式用于一對(duì)多的

    2024年02月15日
    瀏覽(27)
  • 消息隊(duì)列——rabbitmq的不同工作模式

    消息隊(duì)列——rabbitmq的不同工作模式

    目錄 Work queues 工作隊(duì)列模式 ?Pub/Sub 訂閱模式 Routing路由模式 Topics通配符模式? ?工作模式總結(jié) C1和C2屬于競(jìng)爭(zhēng)關(guān)系,一個(gè)消息只有一個(gè)消費(fèi)者可以取到。 ?代碼部分只需要用兩個(gè)消費(fèi)者進(jìn)程監(jiān)聽(tīng)同一個(gè)隊(duì)里即可。 兩個(gè)消費(fèi)者呈現(xiàn)競(jìng)爭(zhēng)關(guān)系。 用一個(gè)生產(chǎn)者推送10條消息 兩個(gè)監(jiān)

    2024年02月16日
    瀏覽(27)
  • RabbitMQ常用工作模式+整合springboot

    RabbitMQ常用工作模式+整合springboot

    目錄 1.MQ的相關(guān)概念 1.1 什么是MQ消息中間件 1.2 為什么使用MQ (1) 應(yīng)用解耦 (2) 異步提速 ? (3)削峰填谷 1.3 使用MQ的劣勢(shì) 1.4 常見(jiàn)的MQ組件??????? 2. RabbitMQ的概述 2.1 RabbitMQ的概念 2.2 RabbitMQ的原理 2.3 安裝RabbitMQ 3. RabbitMQ 的工作模式 3.1 simple (簡(jiǎn)單模式) 3.2?Work queues(工作模

    2024年02月15日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包