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

  • 相关阅读:
    clientHeight、offsetHeight、scrollHeight详解
    JavaScript中常见的字符串操作函数及用法
    获取伪元素的属性和改变伪元素的属性
    HTML和CSS实现左侧固定宽度右侧内容可滚动
    gulp常用插件
    gulp入门详细教程
    Javascript 异步实现机制
    JavaScript:彻底理解同步、异步和事件循环(Event Loop)
    chrome调试,打完断点后关于JS的几个控制介绍
    js断点调试心得
  • 原文地址:https://www.cnblogs.com/dengshaojun/p/9953145.html
Copyright © 2011-2022 走看看