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模式相关推荐

  1. 05_RabbitMQ入门案例—fanout模式Direct模式Topic模式

    RabbitMQ入门案例-fanout模式 package com.tian.rabbitmq.routing;import com.rabbitmq.client.Channel; import c ...

  2. rabbitmq fanout java_spring boot整合RabbitMQ实例详解(Fanout模式)

    1.Fanout Exchange介绍 Fanout Exchange 消息广播的模式,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routing_key会被忽略. 如上图所示 ...

  3. rabbitmq几种工作模式_RabbitMQ的六种工作模式总结

    精品推荐 国内稀缺优秀Java全栈课程-Vue+SpringBoot通讯录系统全新发布! 作者:侧身左睡 https://www.cnblogs.com/xyfer1018/p/11581511.ht ...

  4. RabbitMQ 消息队列六种模式

    RabbitMQ 的第一个程序 RabbitMQ-生产者|消费者 搭建环境 java client 生产者和消费者都属于客户端, rabbitMQ的java客户端如下 创建 maven 工程 < ...

  5. RabbitMQ的Topics 通配符模式(Topic)

    RabbitMQ的Topics 通配符模式(Topic) 模式说明 Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列.只不过 Topic 类型Exch ...

  6. RabbitMQ五种工作模式

    RabbitMQ五种工作模式 1.简单队列 一个生产者对应一个消费者!! 2.work 模式 一个生产者对应多个消费者,但是一条消息只能有一个消费者获得消息!!! 轮询分发就是将消息队列中的消息,依次 ...

  7. RabbitMQ交换机(扇出模式、直接模式)学习笔记

    视频地址 什么是交换机? RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列.实际上,通常生产 者甚至都不知道这些消息传递传递到了哪些队列中. 情况实际上是这样的,生产 ...

  8. 基于SpringCloud开发rabbitmq五种工作模式实现

    工作模式 1. RabbitMQ消息模型 2. SpringAMQP 2.1. Basic Queue 简单队列模型 2.1.1.消息发送 2.1.2.消息接收 2.1.3.测试 2.2. WorkQ ...

  9. 消息中间件的应用场景与 RabbitMQ的六种工作模式介绍

    消息中间件的应用场景与 RabbitMQ的六种工作模式介绍 消息中间件应用场景 异步处理 应用解耦 流量削峰 RabbitMQ的六种工作模式 简单模式 工作模式 发布订阅模式 路由模式 主题模式 PR ...

最新文章

  1. 利用python模块paramiko在CentOS 6.3 64上搭建SFTP环境
  2. MathType公式行距设置的方法
  3. java字符排序规则_java 重写排序规则,用于代码层级排序
  4. oracle创建表时创建序列号,oracle表中怎么建序列
  5. SQL开发中容易忽视的一些小地方( 三)
  6. 移动自动化测试:appium的用法 (appium usage)
  7. JSON Assertion(JSON断言)
  8. 关于直流输电方向一些行业动态
  9. Linux系统分区备份工具,linux系统备份工具:clonezilla
  10. ubntu 五笔输入法 打不出词组
  11. beyond compare 4 This license key has been revoked 出现的问题与解决办法
  12. [数理工程学] 梅花易数-[宋]邵雍 宋抄本影印
  13. Spherical Harmonics Lighting in DirectX
  14. java rxtx version_RXTX实现JAVA串口编程
  15. linux配置命令的各列解释,很实用的linux运维常用命令及知识 | 旺旺知识库
  16. python panda3d教程_panda3d学习笔记(一)Hello World
  17. 超越图灵测试:判断机器是否在思考的现代方法
  18. JavaScript正则、闭包和匿名函数
  19. 超声波风速风向传感器的技术参数
  20. 新版gsp计算机培训课件,新版gsp《药品经营质量管理规范》释义v0708ppt课件.ppt

热门文章

  1. jQuery设置disabled属性与移除disabled属性
  2. 脚本 linux bash PowerShell、alibaba clound toolkit OpenSSH
  3. python pandas rename_Python3 pandas库(10) 修改列名和索引rename()
  4. 【Office】字体大小对应(比如“四号=14”)
  5. 微信小程序云开发通过服务号给用户推送模板消息
  6. java btrace_Java调优—Btrace监控Java线程/方法执行参数、执行时间(Windows)
  7. 快速排序算法(C语言实现)
  8. AndroidStudio XML文件之style标签详解
  9. python 画八角形步骤_只需 45 秒,Python 给故宫画一组手绘图!
  10. Create Geometry From WKB(using NetTopologySuite)