RabbitMQ-基本使用

RabbitMq的基本使用 Mq:消息队列(Message Queue)从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已 作用:应用程序 "对" 应用程序的通信方式 应用场景 主要解决异步处理、应用解耦、流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构 1.异步处理 用户注册后,需要发注册邮件和注册短信 2.应用解耦 用户... 阅读详情

1 概述

RabbitMQ中的几个基本概念:

(1)信道(channel):信道是消息的生产者、消费者和服务器之间进行通信的虚拟连接。为什么叫“虚拟连接”呢?因为TCP连接的建立是非常消耗资源的,所以RabbitMQ在TCP连接的基础上构建了虚拟信道。我们尽量重复使用TCP连接,而信道是可以用完就关闭的。

(2)队列(queue):队列是用来进行消息收发的地方,生产者把消息放到队列中,消费者从队列中获取消息。

(3)交换机(exchange):交换机用于把消息路由到一个或者多个队列中。

RabbitMQ介绍:

1 基于erlang 语言开发--- 高并发语言

2 索尼 爱立信 开发的;

3 依赖于erlang 环境;

4 功能全面

5 可视化的插件

2 环境准备

1 VS2022

2 .NET7平台

3 Docker

4 RabbitMQ

5 Linux的云服务器

3 Docker下安装RabbitMQ

docker search rabbitmq:management
docker pull rabbitmq:management
docker run -d --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management

拉取时建议使用management,同时会安装相应环境插件。

Rabbitmq默认端口是:15672—可视化界面,5672----操作数据的时候---通过这个端口去链接。

容器运行成功就可以访问RabbitMQ页面了,地址:http://192.168.xxx.xxx:15672,默认账号密码guest。

4 C#.Net如何使用RabbitMQ

程序驱动

1 Nuget引入

2 连接接RabbitMQ

3 写入消息

4 定义接受方,消费消息

5 构建生产者消费者模型

1 生产者写入消息到队列

2 消费者获取消息消费掉

6 消息入队全过程

1生产者打开RabbitMq链接

2声明队列

3声明交换机

4绑定队列和交换机

5消息进入到交换机---交换机转发给队列

6消息成功入队

7 落地生产者消费者模型

.NET程序连接RabbitMq

Nuget引入:RabbitMq连接帮助类库 RabbitMQ.Client 6.5.0。

生产者:

{
    //.NET程序连接RabbitMq
    //1.Nuget引入 RabbitMq连接帮助类库--RabbitMQ Client 
    string dir = AppDomain.CurrentDomain.BaseDirectory;
    //当前生产者名称
    string? producerName = Path.GetFileName(Path.GetDirectoryName(dir));

    //重点:
    //链接工厂;帮助配置一个完整的链接
    ConnectionFactory factory = new ConnectionFactory(); //创建链接的工厂 
    //RabbitMQ服务所在地址
    factory.HostName = UrlConfig.Rabbitmq_Url;
    //用户名    
    factory.UserName = UrlConfig.User;
    //密码  
    factory.Password = UrlConfig.Password;

    //程序调用默认的端口是:5672   
    factory.Port = 5672;

    //创建链接
    using (IConnection connection = factory.CreateConnection())
    {
        //创建信道  --高速公路---单车道
        using (IModel channel = connection.CreateModel())
        {

            //创建一个队列---根据名称来判断,如果队列名称存在,就不操作,
            //如果不存在,就根据名字创建一个队列出来。
            channel.QueueDeclare(queue: "OnlyProducerMessage", durable: true,
                                 exclusive: false, autoDelete: false, arguments: null);

            //创建一个交换机--后面说
            channel.ExchangeDeclare(exchange: "OnlyProducerMessageExChange",
                                    type: ExchangeType.Direct, durable: true, 
                                    autoDelete: false, arguments: null);

            //交换机绑定队列
            channel.QueueBind(queue: "OnlyProducerMessage",
                              exchange: "OnlyProducerMessageExChange",
                              routingKey: string.Empty, arguments: null);


            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine($"=========生产者:{producerName} 已准备就绪=========");
            int i = 1;
            {
                while (true)
                {
                    string message = $"{producerName} : 学习.NET技术_{i}";
                    //smpq协议,需要传递数据格式微byte数组
                    byte[] body = Encoding.UTF8.GetBytes(message);

                    //用指定的频道去发送消息
                    channel.BasicPublish(
                        exchange: "OnlyProducerMessageExChange",
                        routingKey: string.Empty,
                        basicProperties: null,
                        body: body);
                    Console.WriteLine($"=========消息:{message} 已发送=========");
                    i++;
                    Thread.Sleep(500);
                }
            }
        }
    }
}

消费者:

string dir = AppDomain.CurrentDomain.BaseDirectory;
//当前生产者名称
string? consumerName = Path.GetFileName(Path.GetDirectoryName(dir));

ConnectionFactory factory = new ConnectionFactory(); //创建链接的工厂
factory.HostName = UrlConfig.Rabbitmq_Url;//RabbitMQ服务在本地运行
factory.UserName = UrlConfig.User;//用户名
factory.Password = UrlConfig.Password;//密码  
factory.Port = 5672;

using (IConnection connection = factory.CreateConnection()) //创建链接
{
    using (var channel = connection.CreateModel())
    {
        Console.ForegroundColor = ConsoleColor.Green;

        //消费者准备就绪
        try
        {
            //事件驱动模式
            EventingBasicConsumer consumer = new EventingBasicConsumer(channel);

            //接受到消息之后,触发事件--就会触发给事件注册的动作;
            consumer.Received += (model, ea) =>   //接受消息处理的事件;
            {
                ReadOnlyMemory<byte> body = ea.Body;
                string message = Encoding.UTF8.GetString(body.ToArray());

                Console.WriteLine($"{consumerName}: 接受消息: {message}");
            };

            //消息确认----自动确认---同时也明确我这里是接收哪个队列的消息
            channel.BasicConsume(queue: "OnlyProducerMessage", autoAck: true,
                consumer: consumer);


            Console.WriteLine(" Press [enter] to exit.");
            Console.ReadLine();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}
直流有刷电机控制 - 驱动电路(二) 1.如图所示为最常见的推挽驱动电路,我附加了具有正反转功能的电机驱动控制,正反转是由两个继电器组成。使用推挽电路来驱动NMOS管时充电电流和放电电流都很大,因此NMOS管导通快,关断也快,而且NMOS温度不会很高。下面来介绍一下该电路的原理。(1)PWM_MCU是由单片机给出的PWM波信号,该信号是由一些列高低电平的方波构成。当信号为高电平的时候Q3导通,经过R47再到Q5的g极,此时mos导通,如果是K1闭合是正转那么K2闭合就是反转。(2)当PWM低电平时使得Q3关断,Q6导通。 阅读详情

相关推荐

Flowable第一篇、快速上手(Flowable安装、配置、集成)

Flowable是一个轻量级、高效可扩展的工作流和业务流程管理(BPM)引擎,支持在Java应用程序中实现复杂的工作流自动化。Flowable最初是作为Activiti项目的一个分支发展而来的,但它现在已经成为一个独立的开源项目,并在企业级应用中得到了广泛使用

Du_XiaoNan的博客 1万+

分布式异步队列学习总结4(生产者和消费者)

生产者向RabbitMQ服务发送消息,消费者从RabbitMQ服务中获取消息。 单生产者单消费者模式 使用程序演示单生产者和单消费者模型: 项目结构为两个.net Core 控制台程序应用程序 程序需要添加引用 RabbitMQ.Client AspNetCore.RabbitMQ.MessageConsumer_01.MessageConsumer: using RabbitMQ.Client; using RabbitMQ.Client.Events; using S.

每天学习一点点 817

视频异常检测 5 大经典数据集实战对比:UCSD Ped2 vs CUHK Avenue vs Street Scene

本文深入对比分析了视频异常检测领域的五大经典数据集,包括UCSD Ped2、CUHK Avenue和Street Scene等,从场景复杂度、异常类型和标注质量等多维度进行实战评估。通过详细的数据集特性解析和计算效率测试,为研究者和工程师提供选型指导,帮助优化算法在智能监控和安防领域的应用效果。

weixin_33800463的博客 409

RabbitMQ的基本使用

RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。 一、消息队列 1、MQ:Message Queue释义 服务之间最常见的通信方式是直接调用彼此来通信,消息从一端发出后立即就可以达到另一端,称为即时消息通讯(同步通信) 消息从某一端发出后,首先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端,称为延迟消息通讯(异步通信) 2、消息队列特点.

qq_54936371的博客 3077

差分分析.

差分分析是一种强大的密码攻击技术,通过研究明文差分与密文差分的关系来破解加密算法。本文系统介绍了差分分析的核心概念和方法: 基础差分分析:通过异或运算抵消密钥影响,利用差分分布表(DDT)寻找高概率差分特征,以FEAL-4为例展示了具体攻击过程。 高级差分技术:包括截断差分分析(关注部分特征)、不可能差分分析(排除概率为0的路径)和飞来去器分析(将算法分段处理)。 自动化搜索方法:介绍了松井算法和MILP(混合整数线性规划)方法,将差分路径搜索转化为数学优化问题。 这些方法展现了差分分析从基础理论到现代应用

weixin_61562383的博客 786

保姆级教程:在Rockchip RK3588 SDK中,如何为你的新硬件板子创建第一个DTS文件

本文提供在Rockchip RK3588 SDK中为自定义硬件创建首个DTS文件的详细教程。通过分析DTS在RK3588开发中的角色、快速定位参考设计、实操步骤及调试验证方法,帮助开发者高效完成硬件板级配置,特别适合嵌入式Linux系统开发者参考。

weixin_28678831的博客 283

【RabbitMQ】RabbitMQ 的基本认识

​ 消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统;RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。 ​

chenzhong373095238的博客 1370

Allegro17.4原理图-PCB双向联动技巧:从网表生成到同步高亮

本文深入解析了Cadence Allegro 17.4中原理图与PCB的深度双向联动技巧。核心在于通过精准的网表生成与管理、实时的跨窗口交互高亮与信号追踪,以及元件与封装的智能匹配更新,构建高效协同设计工作流。掌握这些技巧能显著提升高速、高密度电路设计的效率与准确性,实现从逻辑设计到物理实现的无缝衔接。

weixin_29178069的博客 358

RabbitMQ基本使用

本文介绍了RabbitMQ的基本使用,详细记录了RabbitMQ的具体使用方法

大脑不能为空 1559

Arcgis中的高级模型构建器技术之图层按某一字段批量转KMZ

本文介绍在ArcGIS模型构建器中创建按属性批量转换KMZ的工具。通过迭代要素选择工具按字段属性分类,结合应用图层符号设置和图层转KML工具,实现将单个图层按指定属性(如规划地类)自动分批次转换为带符号的KMZ文件。关键步骤包括:1)设置迭代要素选择参数;2)应用预设符号系统;3)配置KMZ输出路径和命名规则。该工具可高效处理规划图斑等数据,保持分类符号化效果,输出结果为按属性值命名的多个KMZ文件。

weixin_44671081的博客 469

专栏目录:Linux 内存管理子系统的进化——从 MM 到 HMM

专栏梳理了Linux内存管理子系统从经典MM到异构内存管理(HMM)的演进历程。内容分为六大部分:首先介绍经典MM基础,包括虚拟地址空间、页表、VMA等核心机制;其次分析MM通用框架如页表遍历、NUMA迁移等;然后探讨设备内存引入的关键技术,如ZONE_DEVICE和dev_pagemap;接着深入解析HMM核心机制及其与DMA的集成;随后通过多个实际驱动案例展示HMM应用;最后讨论大页支持等进阶主题。专栏采用"经典机制→问题→扩展方案"的三段式结构,帮助开发者理解Linux如何通过HMM实现设备内存管理。

图形/计算GPU的驱动与虚拟化技术分享园地 865

RabbitMQ 之 使用Web管理界面认识RabbitMQ

一、RabbitMQ简介: RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现 核心概念: Message 消息 消息是不具名的,它由消息头和消息体组成,消息体式不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mo...

qq_41097820的博客 4万+

智能Agent如何重塑企业流程

在当今数字化时代,企业流程的效率和敏捷性至关重要。传统企业流程往往受限于人工操作,效率低下、成本高昂,难以适应快速变化的市场环境。智能Agent作为一种新兴技术,凭借其强大的智能化能力,正在逐渐改变企业流程的运作模式,为企业带来新的机遇和挑战。智能Agent是一种能够感知环境、自主决策、执行任务的软件实体。它可以模拟人类的智能行为,例如学习、推理、规划和沟通。通过将智能Agent嵌入到企业流程中,可以实现流程的自动化、优化和智能化,从而提高效率、降低成本、提升客户体验。8.1 研究成果总结。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 872

【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装

本文涉及MQ的基本概念、RabbitMQ简介、RabbitMQ的安装等内容

十八岁讨厌编程的博客 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

rabbitMQ 基本使用

消息队列 Message queue 释义 服务之间最常见的通信方式是直接调用彼此来通信,消息从一端发出后立即就可以达到另一端,称为即时消息通讯(同步通信) 消息从某一端发出后,首先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端,称为延迟消息通讯(异步通信) 带来的好处 1. 小红想给小明书的时候,不必问小明什么时候有空,亲手把书交给他了,小红只把书放到书架上就行了.这样小红小明的时间都更自由. 2. 小红相信小明的读书自觉和读书能力,不必亲眼观察小明的读书过程,

m0_58525944的博客 953

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RabbitMQ介绍以及基本使用

消息队列是一种用于在分布式系统中进行通信的技术。它是一种存储和转发消息的中间件,可以用于将应用程序之间的通信解耦,从而实现高效的异步通信。消息队列允许发送者将消息发送到队列中,而接收者则可以从队列中获取消息并进行处理。这种方式可以帮助系统实现高可用性、高性能、松耦合和可伸缩性。消息队列通常包括生产者(发送消息的应用程序)、消费者(接收消息的应用程序)和队列(存储消息的缓冲区)。RabbitMQ:是由erlang语言开发,基于AMQP(高级消息队列协议)协议实现的一种消息队列。市面上还有很多消息队列,比如Ka

qq_40950398的博客 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

RabbitMQ 基本使用

在创建队列的时候可以设置队列的存活时间,当消息进⼊到队列并且在存活时间内没 有消费者消费,则此消息就会从当前队列被移除;应⽤程序通过读写出⼊队列的消息(针对应⽤程序的数据)来通信,⽽⽆需专⽤连接来。我们使⽤消息队列,消息队列和交换机可以通过管理系统完成创建,也可以在应⽤程序。在特定的业务场景中:⽤户注册成功之后,发送短息通知⽤户(A服务为⽤户注册,⼀个交换机绑定多个消息队列,每个消息队列有⼀个消费者监听。⼀个交换机绑定多个消息队列,每个消息队列都由⾃⼰唯⼀的。

qq_52922453的博客 2542

rabbitmq系列1——安装并使用rabbitmq

🔥本篇概览:详细讲解了安装并使用rabbitmq,并讲解了数据隔离而生的的virtualhost。🌈⭕🔥

做一个善良的人,做好自己的事,如果愿意,再发一份光。 2066

RabbitMQ基本使用,docker安装RabbitMQ,SpringBoot整合RabbitMQ

springboot整合rabbitmq

weixin_45810161的博客 1069
上一篇: IOC容器和依赖注入
下一篇: RabbitMQ-交换机
似水明俊德
博客等级 码龄8年 247粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值