zoukankan      html  css  js  c++  java
  • rabbitMQ的三种路由模式

    rabbitMQ工作流程:

    1、声明交换机

    2、声明消息队列

    3、绑定交换机和队列

    4、生产者往交换机里发送新消息

    5、交换机根据所选的模式和routingKey决定消息发往哪条消息队列

    6、一个消费者只能消费一条消息队列

    (如果重复声明,类型参数不变不会报错。 如果第二次声明和第一次类型参数有变化,会报异常) 

    上代码:

     1             var factory = new ConnectionFactory();
     2             factory.UserName = "guest";
     3             factory.Password = "guest";
     4             factory.HostName = "127.0.0.1"; //设置RabbitMQ服务器所在的IP或主机名
     5             var connection = factory.CreateConnection();
     6 
     7             using (IModel channel = connection.CreateModel())
     8             {
     9                 //声明一个交换机
    10                 channel.ExchangeDeclare(exchange: "exchange1",
    11                                         type: ExchangeType.Topic,
    12                                         durable: true,
    13                                         autoDelete: false,
    14                                         arguments: null);
    15 
    16                 //声明三个消息队列
    17                 channel.QueueDeclare(
    18                     queue: "q1",
    19                     durable: true,
    20                     exclusive: false,
    21                     autoDelete: false,
    22                     arguments: null);
    23 
    24                 channel.QueueDeclare(
    25                     queue: "q2",
    26                     durable: true,
    27                     exclusive: false,
    28                     autoDelete: false,
    29                     arguments: null);
    30 
    31                 channel.QueueDeclare(
    32                     queue: "q3",
    33                     durable: true,
    34                     exclusive: false,
    35                     autoDelete: false,
    36                     arguments: null);
    37 
    38                 //用不同的routingKey绑定队列与交换机
    39                 channel.QueueBind(queue: "q1",
    40                                     exchange: "exchange1",
    41                                     routingKey: "person.name.*",
    42                                     arguments: null);
    43 
    44                 channel.QueueBind(queue: "q2",
    45                                     exchange: "exchange1",
    46                                     routingKey: "person.age.*",
    47                                     arguments: null);
    48 
    49                 channel.QueueBind(queue: "q3",
    50                                     exchange: "exchange1",
    51                                     routingKey: "person.#",
    52                                     arguments: null);
    53 
    54 
    55                 //往交换机中发出一条消息
    56                 channel.BasicPublish(
    57                         exchange: "exchange1",
    58                         routingKey: "person.name.jerry",
    59                         basicProperties: null,
    60                         body: Encoding.UTF8.GetBytes(msg));   
    View Code

     三种常用路由模式:

    1、Direct

    这种模式下,交换机根据routingKey进行完全匹配。如果匹配失败则丢弃消息。

    例如:绑定的交换机routingKey是"person.name",而使用BasicPublish()方法往交换机发消息时用的"person.name"则匹配成功,将根据交换机名称和routingKey找到绑定的消息队列,并发送新消息。

    2、Fanout

    这种模式会完全忽略routingKey。

    只要往交换机1中发送消息,则会广播到与交换机1绑定的所有消息队列。

    3、Topic

    这种模式下可以对routingKey进行模糊匹配,如果匹配失败则丢弃消息,如果匹配多个结果,则往多个结果都发送消息。

    类似于正则表达式, 它有两种语法:“*”,"#"

    "*"只匹配当前级别的词,如"person.*"可以匹配"person.name",无法匹配"person.name.jerry"。无法匹配空,如"person"。

    "#"能匹配多个子级别的词,如"person.#"可以匹配"person.name",也可以匹配"person.name.jerry"。可以匹配空,如"person"。

  • 相关阅读:
    vue2.5.2 在ie11打开空白的解决方法
    小程序自定义组件中observer函数的应用
    小程序将一个完整项目导入,报错ENOENT: no such file or directory(game.json)
    企业微信应用开发前准备
    jquery转盘抽奖游戏
    小程序路由跳转携带参数方法(直接跳转、事件委托跳转)
    小程序定义并使用模板template
    小程序真机预览,提示“音乐文件错误,播放失败”
    Java反编译
    DataX
  • 原文地址:https://www.cnblogs.com/dengshaojun/p/9953145.html
Copyright © 2011-2022 走看看