菜的像徐坤
排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

消息队列(消息消费)

4888人阅读 2022/2/5 22:58 总访问:961087 评论:0 收藏:0 手机
分类: .net core

前言

消息队列中几个重要角色

交换机
负责把消息放在队列当中

队列
存放消息

路由键
交换机通过路由键去找到对应的路由(多个队列通过路由键来关联)

消息消费的两种模式

1:主动模式

      主动从队列中去拉取消息。

      优点:消费灵活,可以随时消费

 

  2:被动模式

      一旦有消息进来,马上触发消费

      优点:即时性好

消息消费(以事件的方式消费)

  1.  //创建链接工厂类
  2.  ConnectionFactory connectionFactory = new ConnectionFactory() { HostName ="localHost",UserName ="guest",Password = "guest",Port= 5672 };
  3.   services.AddSingleton<ConnectionFactory>(connectionFactory);
  1.      
  2.         public IActionResult Xiaofei()
  3.         {
  4.             //创建链接
  5.             using (var conn = factory.CreateConnection())
  6.             {
  7.                 //打开一个通道 
  8.                 using (var channel = conn.CreateModel())
  9.                 {
  10.                     //绑定一个通道
  11.                     EventingBasicConsumer eventingBasicConsumer = new EventingBasicConsumer(channel);
  12.                     eventingBasicConsumer.Received += EventingBasicConsumer_Received;
  13.                     //使用事件的方式(队列名称,是否立马应答,绑定事件)(如果不想消息被重复读取将 false改为true)
  14.                     channel.BasicConsume("maoyuan"false, eventingBasicConsumer);
  15.                 }
  16.             }
  17.             return View();
  18.         }
  19.         /// <summary>
  20.         /// 消息消费事件
  21.         /// </summary>
  22.         /// <param name="sender"></param>
  23.         /// <param name="e"></param>
  24.         private void EventingBasicConsumer_Received(object sender, BasicDeliverEventArgs e)
  25.         {
  26.             var body = e.Body.ToArray();
  27.             var message = Encoding.UTF8.GetString(body);
  28.         }

消息消费(一条一条的读取)

  1.       public IActionResult Xiaofei()
  2.         {
  3.             //创建链接
  4.             using (var conn = factory.CreateConnection())
  5.             {
  6.                 //打开一个通道 
  7.                 using (var channel = conn.CreateModel())
  8.                 {   //一行一行的获取(队列名,是否自动删除)
  9.                     var result = channel.BasicGet("maoyuan"false);
  10.                     string message=  Encoding.UTF8.GetString(result.Body.ToArray());
  11.                 }
  12.             }
  13.             return View();
  14.         }

如何遍历呢

  1.                      List<stringlist = new List<string>();
  2.                     //获取消息总条数
  3.                     uint messagecount = channel.MessageCount("maoyuan");
  4.                     BasicGetResult result;
  5.                     //一行一行的获取(队列名,是否自动删除)
  6.                     for (int i = 0; i < messagecount; i++)
  7.                     {
  8.                          result = channel.BasicGet("maoyuan"false);
  9.                          list.Add(Encoding.UTF8.GetString(result.Body.ToArray()));
  10.                     }

消息队列答应模式

 自动确认:

      获取消息后自动删除,更方便

 

 手动确认:

     获取消息后用户自动调用是否确认收到消息,然后在删除消息,可控性更强



评价

线程异步编程与消息队列区别想法

开线程也是异步,消息队列也是异步为什么还要用消息队列?因为开线程始终是在一个项目中,处理也需要这个项目或者这台电脑...

net core使用消息队列rabbitmq

使用NuGet下载rabbitmq客户端工具Install-Package RabbitMQ.Client -Version 3.6.5生产消息staticvoidMain(string[]args) ...

消息队列rabbitmq介绍

消息队列的一般作用 异步调用,延迟处理 应用解耦 流量消峰,处理高并发,秒杀等 说白了,消息队列就是一方生产消息,一方...

消息队列

## 消息队列- 消息队列: -- 就是一种订阅发布模式的实现- 主要的角色1. 消息的生产者2. 消息的消费者3. 消息队列- 作用:1...

消息队列rabbitMQ入门

前言常用的消息队列MSMQ:微软自带的消息队列,使用的人少,不开源rabbitMQ:开源,支持语言多,使用比较广泛,社区支持强roc...

C ?、?? 问号和2个问号的用法类型?、对象?

C# ?C# ???:单问号1.定义数据类型可为空。可用于对int,double,bool等无法直接赋值为null的数据类型进行null的赋值如这...

Python实例 1-日志抓取处理 补错附日志小技巧

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

C 数组拆分泛型

主要用到了泛型。泛型是c#2.0的一个新增加的特性,它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值...

MySQL 视图的增删改 查

要显示视图的定义,需要在SHOWCREATEVIEW子句之后指定视图的名称, 我们先来创建几张表,完事后在进行演示:--用户信息表...

使用NPOI导出excel包括图片

Excl模板导出相信我们都会,那么模板上要导出图片呢?嗯~还是来个例子:准备工作:首先要引用NPOI包:然后获取数据集(我这...

ajaxSubmit异步上传图片嘘,外面都是假的

引用代码&lt;scriptsrc=&quot;/Scripts/jquery.form.js&quot;&gt;&lt;/script&gt;js就在旁边img链接中,只不过大小为0x0,...

.NET MVC 使用百度编辑器详细教程:1配置编辑器

一、什么是百度编辑器百度编辑器UEditor是由百度web前端研发部开发一款应用于网站的编辑器,具有轻量,可定制,注重用户体...

使用jquery操作元素的css样式获取、修改等等

使用jquery操作元素的css样式(获取、修改等等) //1、获取和设置样式 $(&quot;#tow&quot;).attr(&quot;class&quot;)...

.net辗转java系列视野

.net辗转java系列(一)视野.net系java系其它语言C#Java框架.net Framework Standardjava se.net corejava eejave meJava S...

.NET MVC json对象或者json对象数组的序列化和反序列化

1、用JSON.stringify()将对象stuarr或者json数组stuarr序列化成字符串,然后提交给后台。$.post(&quot;/home/DoUpdate&quot...