Rabbitmq运用之fanout模式
Rabbitmq运用之fanout模式
代码在文末无条件提供
rabiitmq 的 fanout 属于多播模式,他的工作图如下,应用场景挺多的。比如订单,客户下单后,会发送消息告诉客户下单成功,通知仓库出货等。
在上面的图可以看到,项目里有四个启动项目
这里用到RabbitmqFanoutConsumerSend,RabbitmqFanoutConsumerWMS,RabbitmqFanoutProduct这三个控制台,另外一个没用
RabbitmqFanoutProduct 属于生产端,当订单提交成功后,生产端回向某个交换器exchange (这里定义fanoutexchange)推送消息(这种模式是没用路由的) 然后会分别向(sendqueue)和(wmsqueue)两个队列里各种推送一条消息,再经过,各个消费端对各自的队列进行消费,做相关的业务。
我比较简单粗暴,直接上图上代码
代码里面有我写的注释,相信大家一看就懂
生产端的代码如下。
using RabbitMQ.Client;
using System;
using System.Text;
using System.Threading;namespace RabbitmqFanoutProduct
{class Program{static void Main(string[] args){//创建连接工厂 用户名账户 ,密码/IP地址端口号ConnectionFactory connectionFactory = new ConnectionFactory() { Password="123456",UserName="Henry",HostName="localhost",VirtualHost="Test",Port=5672};//创建连接IConnection connection= connectionFactory.CreateConnection();//创建通道IModel channel= connection.CreateModel();//这里定义交换器名称和 模式,channel.ExchangeDeclare("fanoutexchange", ExchangeType.Fanout, true, false, null);//队列都是在消费端定义的,哪个要监听,就加进来。//接下来是发送信息while (true){string[] list = new string[] { "落叶的订单", "Kettle的订单", "Henry的订单", "微信173265046" };foreach (var item in list){string text = item + "---" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");Console.WriteLine("生产端推送订单"+ text);byte[] content = Encoding.UTF8.GetBytes(text);channel.BasicPublish("fanoutexchange", "", null, content);Thread.Sleep(5000);}}Console.ReadKey();Console.WriteLine("Hello World!");}}
}
启动后如图
两个生产端分别如下,两个端用的消费模式是不一样的,大家要仔细看看
短信消费端;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;namespace RabbitmqFanoutProductSend
{class Program{static void Main(string[] args){//创建连接工厂 用户名账户 ,密码/IP地址端口号ConnectionFactory connectionFactory = new ConnectionFactory(){Password = "123456",UserName = "Henry",HostName = "localhost",VirtualHost = "Test",Port = 5672};//创建连接IConnection connection = connectionFactory.CreateConnection();//创建通道IModel channel = connection.CreateModel();//这里定义交换器名称和 模式 durable 持久化 ,autodelete 断开删除channel.ExchangeDeclare("fanoutexchange", ExchangeType.Fanout, true, false, null);//定义短信队列channel.QueueDeclare("sendqueue", true, false, false, null);//绑定队列和交换器channel.QueueBind( "sendqueue", "fanoutexchange", "",null);//主要是不让整个队列一下子到消费端,减少消费端的压力channel.BasicQos(0, 1, false);//事件消费模式,另外一种模式在另外一个消费端展现EventingBasicConsumer eventingBasicConsumer = new EventingBasicConsumer(channel);eventingBasicConsumer.Received += (obj,evet)=>{ string content= Encoding.UTF8.GetString(evet.Body.ToArray());Console.WriteLine($"消费端信息-收到订单{content} 发送短信");//确认一个或多个已传递的消息 踢出队列channel.BasicAck(evet.DeliveryTag, true);// 当失败的时候 拒绝确认,是否放回队列// channel.BasicReject(evet.DeliveryTag, true);};//开始消费某个队列,不自动确认,开始时间channel.BasicConsume("sendqueue", false, eventingBasicConsumer);Console.ReadKey();Console.WriteLine("Hello World!");}}
}
仓库消费端
using RabbitMQ.Client;
using System;
using System.Text;
using System.Threading;namespace RabbitmqFanoutWMS
{class Program{static void Main(string[] args){//创建连接工厂 用户名账户 ,密码/IP地址端口号ConnectionFactory connectionFactory = new ConnectionFactory(){Password = "123456",UserName = "Henry",HostName = "localhost",VirtualHost = "Test",Port = 5672};//创建连接IConnection connection = connectionFactory.CreateConnection();//创建通道IModel channel = connection.CreateModel();//这里定义交换器名称和 模式 durable 持久化 ,autodelete 断开删除channel.ExchangeDeclare("fanoutexchange", ExchangeType.Fanout, true, false, null);//定义短信队列channel.QueueDeclare("wmsqueue", true, false, false, null);channel.QueueBind( "wmsqueue", "fanoutexchange","", null);while (true) {//从哪个队列获取,是否自动确认 这里是否BasicGetResult basicGetResult = channel.BasicGet("wmsqueue", false);if (basicGetResult != null) {string content = Encoding.UTF8.GetString(basicGetResult.Body.ToArray());Console.WriteLine($"消费端仓库 -收到订单{content} 准备发货");//确认 channel.BasicAck(basicGetResult.DeliveryTag, true);}Thread.Sleep(3000);}Console.ReadKey();Console.WriteLine("Hello World!");}}
}
启动后产生的队列如图
运行的时候如图
代码下载地址(免积分提供)
https://download.csdn.net/download/yu240956419/85351699 可以到我的资源里面找
### 启动后产生的队列如图[外链图片转存中...(img-VoVITmfc-1652279605758)]### 运行的时候如图[外链图片转存中...(img-veBrmooL-1652279605758)]代码下载地址(免积分提供)https://download.csdn.net/download/yu240956419/85351699 可以到我的资源里面找后面有时间再写其他剩下的topic 和header,rpc,死信队列等
Rabbitmq运用之fanout模式相关推荐
- 05_RabbitMQ入门案例—fanout模式Direct模式Topic模式
RabbitMQ入门案例-fanout模式 package com.tian.rabbitmq.routing;import com.rabbitmq.client.Channel; import c ...
- rabbitmq fanout java_spring boot整合RabbitMQ实例详解(Fanout模式)
1.Fanout Exchange介绍 Fanout Exchange 消息广播的模式,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routing_key会被忽略. 如上图所示 ...
- rabbitmq几种工作模式_RabbitMQ的六种工作模式总结
精品推荐 国内稀缺优秀Java全栈课程-Vue+SpringBoot通讯录系统全新发布! 作者:侧身左睡 https://www.cnblogs.com/xyfer1018/p/11581511.ht ...
- RabbitMQ 消息队列六种模式
RabbitMQ 的第一个程序 RabbitMQ-生产者|消费者 搭建环境 java client 生产者和消费者都属于客户端, rabbitMQ的java客户端如下 创建 maven 工程 < ...
- RabbitMQ的Topics 通配符模式(Topic)
RabbitMQ的Topics 通配符模式(Topic) 模式说明 Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列.只不过 Topic 类型Exch ...
- RabbitMQ五种工作模式
RabbitMQ五种工作模式 1.简单队列 一个生产者对应一个消费者!! 2.work 模式 一个生产者对应多个消费者,但是一条消息只能有一个消费者获得消息!!! 轮询分发就是将消息队列中的消息,依次 ...
- RabbitMQ交换机(扇出模式、直接模式)学习笔记
视频地址 什么是交换机? RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列.实际上,通常生产 者甚至都不知道这些消息传递传递到了哪些队列中. 情况实际上是这样的,生产 ...
- 基于SpringCloud开发rabbitmq五种工作模式实现
工作模式 1. RabbitMQ消息模型 2. SpringAMQP 2.1. Basic Queue 简单队列模型 2.1.1.消息发送 2.1.2.消息接收 2.1.3.测试 2.2. WorkQ ...
- 消息中间件的应用场景与 RabbitMQ的六种工作模式介绍
消息中间件的应用场景与 RabbitMQ的六种工作模式介绍 消息中间件应用场景 异步处理 应用解耦 流量削峰 RabbitMQ的六种工作模式 简单模式 工作模式 发布订阅模式 路由模式 主题模式 PR ...
最新文章
- 利用python模块paramiko在CentOS 6.3 64上搭建SFTP环境
- MathType公式行距设置的方法
- java字符排序规则_java 重写排序规则,用于代码层级排序
- oracle创建表时创建序列号,oracle表中怎么建序列
- SQL开发中容易忽视的一些小地方( 三)
- 移动自动化测试:appium的用法 (appium usage)
- JSON Assertion(JSON断言)
- 关于直流输电方向一些行业动态
- Linux系统分区备份工具,linux系统备份工具:clonezilla
- ubntu 五笔输入法 打不出词组
- beyond compare 4 This license key has been revoked 出现的问题与解决办法
- [数理工程学] 梅花易数-[宋]邵雍 宋抄本影印
- Spherical Harmonics Lighting in DirectX
- java rxtx version_RXTX实现JAVA串口编程
- linux配置命令的各列解释,很实用的linux运维常用命令及知识 | 旺旺知识库
- python panda3d教程_panda3d学习笔记(一)Hello World
- 超越图灵测试:判断机器是否在思考的现代方法
- JavaScript正则、闭包和匿名函数
- 超声波风速风向传感器的技术参数
- 新版gsp计算机培训课件,新版gsp《药品经营质量管理规范》释义v0708ppt课件.ppt
热门文章
- jQuery设置disabled属性与移除disabled属性
- 脚本 linux bash PowerShell、alibaba clound toolkit OpenSSH
- python pandas rename_Python3 pandas库(10) 修改列名和索引rename()
- 【Office】字体大小对应(比如“四号=14”)
- 微信小程序云开发通过服务号给用户推送模板消息
- java btrace_Java调优—Btrace监控Java线程/方法执行参数、执行时间(Windows)
- 快速排序算法(C语言实现)
- AndroidStudio XML文件之style标签详解
- python 画八角形步骤_只需 45 秒,Python 给故宫画一组手绘图!
- Create Geometry From WKB(using NetTopologySuite)