热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

rabbitmq查看消费者_.netCore3.1使用RabbitMQ(一)

1.为什么要用消息队列消息队列是啥:消息队列(MessageQueue),一种先进先出的队列结构,用于处理Me
db49b19759bac9ac1f7030b487dbbe07.png

1. 为什么要用消息队列

  • 消息队列是啥:消息队列(Message Queue),一种先进先出的队列结构,用于处理Message。
  • 消息队列解决的问题:在处理大量并发请求时,同步处理往往会发生阻塞,特别是在更新数据库或者调用其他组件时。消息队列能够实现请求的异步处理、应用解耦、流量削锋和消息通讯,同时能够有效防止阻塞导致的消息丢失。
  • 消息队列系统,一般都包含3个角色:队列服务端,队列的生产者,队列的消费者。这种架构与当下流行的分布式架构极为契合。

2. RabbitMQ是啥

  • RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发。同时实现了Broker构架,这意味着消息在发送给客户端时先在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。
7f627b5272d2b15d5fbf331f78d257e3.png
  • 它支持开放的高级消息队列协议 (AMQP,Advanced Message Queuing Protocol),从根本上避免了生产厂商的封闭,使用任何语言的各种客户都可以从中受益。这种协议提供了相当复杂的消息传输模式,所以基本上不需要MassTransit或NServiceBus的配合。它还具有“企业级”的适应性和稳定性。这些东西对我的客户来说十分的有吸引力。
d3df567723a47f5f10d0eeadcead12f5.png
RabbitMQ的整体架构

3. 如何安装RabbitMQ

  • 安装RabbitMQ(下载地址:https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.7.26)(安装之前先安装 Erlang)
099e16798947e7eaf91936f8020262c1.png
cfdeb333490383682674171ea8c41440.png
6f2f6082031336983413134626bb2425.png
将sbin添加到环境目录中的Path中
efeb37342ebfa8df611cb9ad3b2e92f0.png
在Powershell中执行:rabbitmq-plugins list
b76fd77ccddf36e334a75600c1793caa.png
安装RabbitMQ可视化管理端:rabbitmq-plugins enable rabbitmq_management

默认的账户密码都是guest

37433e05d5e892f48b27f2c317d0ac6e.png
登录之后的页面
8bce680fb3afd292d7a8d85cb53b60d0.png
修改或者删除该用户(建议先修改密码,然后添加用户,添加之后再删除guest用户,或者直接改一个密码吗保留guest用户)
8c9a4baa0c0c44338feee53fa375ac00.png
添加一个Admin用户,名称随便,密码随便,角色选择Admin
aee487dd6081fc6238183bf4dace58cd.png
添加完之后刷新Users列表会看到该用户,接下来配置hosts
8a15c6faf6e772bf318e3228e63672fa.png
新建一个testhost,然后点击testhost,进入host配置页面,在Permissions选项中添加admin 的访问权限
a14dab777bc273c20cc8967401a75dcb.png
回到Users页面可以看到如上的列表,至此RabbitMQ配置完成

TIPS:上述操作也可以通过命令行来完成

查看所有用户

rabbitmqctl list_users

添加一个用户

rabbitmqctl add_user admin 123456

配置权限

rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

查看用户权限

rabbitmqctl list_user_permissions admin

设置tag

rabbitmqctl set_user_tags admin administrator

删除用户(安全起见,删除默认用户)

rabbitmqctl delete_user guest

4afd7a6a7e769037420a0ee0f96f6533.png

4. 先了解一下RabbitMQ的队列形式

在使用RabbitMQ之前,咱们先捋一捋RabbitMQ一共有几种使用方式,常用的5中队列

e20992a57df99c36de16e2b0914e40b4.png
  • 第一种:简单队列(一对一模式)耦合性高,生产消费一一对应。
  • 第二种:WorkQueues(工作队列),一个生产,多个消费者共同处理消息。
  • 第三种:订阅模式,1一个生产者多个消费者,每一个消费者有自己的一个队列,生产者直接将消息发送给交换机,交换机将消息发送给队列,每一个队列都需要绑定到交换机。这种模式可以满足消费者发布一个消息,多个消费者消费同一信息的需求,但C1、C2消费的都是相同的数据,有时我们需要C1和C2消费的信息只有部分差异,比如我们需求:C1消费增加的数据,C2消费编辑、增加和删除的数据。
  • 第四种:路由模式,路由模式是在订阅模式基础上的完善,可以在生产消息的时候,加入Key值,与key值匹配的消费者消费信息。但路由模式中,就如三中提到的C1、C2、如果C2对应的类型更多,就需要写很多key值。但其实它只与C1有一点差别。
2ae92f4755c6a8f26cb45e243b61f739.png
  • 第五种:通配符模式是在路由模式的升级,他允许key模糊匹配。*代表一个词,#代表一个或多个词。通过通配符模式我们就可以将C1对应的一个key准确定为item.add。而C2我们就不需要一一写出key值,而是用item.#代替即可。
c47659c2621b66f727948f7ed72f3436.png

5. .net Core3.1如何优雅的使用RabbitMQ

2d8826e646cebf6f9837534b9180c11e.png
新建控制台应用程序,引入RabbitMQ.Client包

创建生产者

using RabbitMQ.Client;
using System;
using System.Text;namespace RabbitMQTest
{///

/// 生产者/// class Program{static void Main(string[] args){//创建连接工厂ConnectionFactory factory = new ConnectionFactory{UserName = "admin",//用户名Password = "lmt456123",//密码HostName = "localhost"//rabbitmq ip};//创建连接var connection = factory.CreateConnection();//创建通道var channel = connection.CreateModel();//声明一个队列channel.QueueDeclare("hello", false, false, false, null);Console.WriteLine("nRabbitMQ连接成功,请输入消息,输入exit退出!");string input;do{input = Console.ReadLine();var sendBytes = Encoding.UTF8.GetBytes(input);//发布消息channel.BasicPublish("", "hello", null, sendBytes);}while (input.Trim().ToLower() != "exit");channel.Close();connection.Close();}}
}

创建一对一消费者

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;namespace RabbitMQConsumer
{///

/// 消费者/// class Program{static void Main(string[] args){//创建连接工厂ConnectionFactory factory = new ConnectionFactory{UserName = "admin",//用户名Password = "lmt456123",//密码HostName = "localhost"//rabbitmq ip};//创建连接var connection = factory.CreateConnection();//创建通道var channel = connection.CreateModel();//事件基本消费者EventingBasicConsumer consumer = new EventingBasicConsumer(channel);//接收到消息事件consumer.Received += (ch, ea) =>{string message = Encoding.Default.GetString(ea.Body.ToArray());Console.WriteLine($"收到消息: {message}");// Console.WriteLine($"收到该消息[{ea.DeliveryTag}] 延迟10s发送回执");// Thread.Sleep(10000);//确认该消息已被消费channel.BasicAck(ea.DeliveryTag, false);// Console.WriteLine($"已发送回执[{ea.DeliveryTag}]");};//启动消费者 设置为手动应答消息channel.BasicConsume("hello", false, consumer);Console.WriteLine("消费者已启动");Console.ReadKey();channel.Dispose();connection.Close();}}
}

启动程序并测试

f5a6c4845b3bdcbc4515c3b8e3610585.png

一对一的消费队列咱们就此创建完成,下一节开始RabbitMQ的高级用法



推荐阅读
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • MiriamPena在可伸缩,高性能,高并发性和高可用性系统方面拥有10多年的经验。她是旧金山AdRoll的一名工程师,负责设计其实时出价 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
author-avatar
huaxingwu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有