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"。

  • 相关阅读:
    228. Summary Ranges
    227. Basic Calculator II
    224. Basic Calculator
    222. Count Complete Tree Nodes
    223. Rectangle Area
    221. Maximal Square
    220. Contains Duplicate III
    219. Contains Duplicate II
    217. Contains Duplicate
    Java编程思想 4th 第4章 控制执行流程
  • 原文地址:https://www.cnblogs.com/dengshaojun/p/9953145.html
Copyright © 2011-2022 走看看