rabbitMQ的三种路由模式
rabbitMQ工作流程:
1、声明交换机
2、声明消息队列
3、绑定交换机和队列
4、生产者往交换机里发送新消息
5、交换机根据所选的模式和routingKey决定消息发往哪条消息队列
6、一个消费者只能消费一条消息队列
(如果重复声明,类型参数不变不会报错。 如果第二次声明和第一次类型参数有变化,会报异常)
上代码:
var factory = new ConnectionFactory();
factory.UserName = "guest";
factory.Password = "guest";
factory.HostName = "127.0.0.1"; //设置RabbitMQ服务器所在的IP或主机名
var connection = factory.CreateConnection(); using (IModel channel = connection.CreateModel())
{
//声明一个交换机
channel.ExchangeDeclare(exchange: "exchange1",
type: ExchangeType.Topic,
durable: true,
autoDelete: false,
arguments: null); //声明三个消息队列
channel.QueueDeclare(
queue: "q1",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null); channel.QueueDeclare(
queue: "q2",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null); channel.QueueDeclare(
queue: "q3",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null); //用不同的routingKey绑定队列与交换机
channel.QueueBind(queue: "q1",
exchange: "exchange1",
routingKey: "person.name.*",
arguments: null); channel.QueueBind(queue: "q2",
exchange: "exchange1",
routingKey: "person.age.*",
arguments: null); channel.QueueBind(queue: "q3",
exchange: "exchange1",
routingKey: "person.#",
arguments: null); //往交换机中发出一条消息
channel.BasicPublish(
exchange: "exchange1",
routingKey: "person.name.jerry",
basicProperties: null,
body: Encoding.UTF8.GetBytes(msg));
三种常用路由模式:
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"。
rabbitMQ的三种路由模式的更多相关文章
- 【RabbitMQ】三种Exchange模式——订阅、路由、通配符模式
https://blog.csdn.net/ww130929/article/details/72842234
- 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...
- 【转】RabbitMQ三种Exchange模式
[转]RabbitMQ三种Exchange模式 RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四 ...
- 虚拟机安装Ubuntu三种网络模式
VMWare提供三种工作模式桥接(bridge).NAT(网络地址转换)和host-only(主机模式). NAT(网络地址转换) 在NAT模式下,虚拟系统需要借助NAT(网络地址转换)功能,通过宿主 ...
- VMWare提供了三种工作模式上网
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...
- vmware虚拟机三种网络模式详解_转
原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 由于L ...
- VMWare虚拟机网络的三种工作模式
VMWare提供了三种工作模式: 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下,需要手工为虚拟系 ...
- Vmware虚拟机三种网络模式详解
原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...
- Nacos系列:Nacos的三种部署模式
三种部署模式 Nacos支持三种部署模式 1.单机模式:可用于测试和单机使用,生产环境切忌使用单机模式(满足不了高可用) 2.集群模式:可用于生产环境,确保高可用 3.多集群模式:可用于多数据中心场景 ...
随机推荐
- Java重写&重载
在学习完类和对象后,接下来就要进入面向对象的内容了,先从重写和重载开始吧.重写(Override)和重载(Overload)是两个不同的概念,也是两个容易混淆的概念,下面具体来说说这两者. 重写( ...
- JavaScript基础进阶之常用字符串方法总结
前面三篇文章简单的把JavaScript基础内容过了一遍,我们已经可以用JavaScript写一些简单的代码了. 今天主要总结一下JavaScript中String对象中自带的一些方法,来帮助我们处理 ...
- IO多路复用(select)
select在操作系统内部,维护了一个for循环,检测对象是否变化.select在各种平台都可使用,但效率不高.select对监听的个数是有限制的(1024) poll与select相同,但是没有监听 ...
- SDWC补题计划
2018的寒假去了SD的冬令营,因为一班二班难度悬殊,对我很不友好,几乎什么也没学会,但是我把两个班的课件都存了下来,现在慢慢把两个班的例题以及课后题都补一补(毕竟冬令营的钱不能白花). 这些题目横跨 ...
- [SHOI2008]小约翰的游戏
题目 不会,抄论文 这是一个非常牛逼的东西,叫做\(anti\)博弈,就是进行最后一次操作的人输 我们考虑一下这道题 显然如果石子个数都是\(1\),那么有奇数堆石子先手必败,有偶数堆石子先手必胜 如 ...
- 【洛谷】【线段树】P1471 方差
[题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差 ...
- ngRouter和ui-router区别
在单页面应用中要把各个分散的视图给组织起来是通过路由机制来实现的.本文主要对 AngularJS 原生的 ngRoute 路由模块和第三方路由模块 ui.router 的用法进行简单介绍,并做一个对比 ...
- 基于PHP的cURL快速入门教程 (小偷采集程序)
cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.很多小偷程序都是使用这个函数. 最爽的是,PHP也支持 cURL 库.本文将介绍 c ...
- nodejs 跨域设置cookie
在做vue全家桶+express 做项目. 想做一个免登陆功能,选择session方案. 服务器设置session 后, 返回的响应头有Set-Cookie,但是浏览器的Application的coo ...
- maven错误The JAVA_HOME environment variable is not defined correctly
晚上,当我准备将好的spring boot通过mvn clean package 打包成jar文件上传到linux服务器时,却在打包过程中出现了错误: C:\>mvn -version The ...