RabbitMQ安装和使用(二)

【RabbitMQ】RabbitMQ的下载安装及使用 交换机是消息队列中的一个组件,有点类似于中转站,上面两个模型都是生产者创建消息队列,然后由消费者去接收指定消息队列中的消息,而交换机模型中,生产者不再创建指定的消息队列,而是创建一个交换机,由消费者去绑定交换机并创建消息队列,然后再接收生产者的消息。topic就像是比direct更高级的脚本(官方说的,topic是比direct更复杂),direct这个脚本只能指定一个群类型,假设我除了想给所有家族群发,还想给我创建的群发,或者我管理的群,很显然,这需要我重新设置目标类型并再一次启动脚本。 阅读详情

本部分主要介绍使用C#语言使用RabbitMQ。

第一步:下载RabbitMQ的客户端程序集,下载地址:http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.4.2/rabbitmq-dotnet-client-3.4.2-dotnet-3.5.zip

下载解压后获取RabbitMQ.Client.dll,将其引用至项目中。

第二步:介绍几个概念

l 生产(Producing)意思就是发送。发送消息的程序就是一个生产者(producer)

l 队列(queue)就是邮箱的名称。消息通过你的应用程序和RabbitMQ进行传输,它们只能存储在队列(queue)中。 队列(queue)容量没有限制,你要存储多少消息都可以——基本上是一个无限的缓冲区。多个生产者(producers)能够把消息发送给同一个队列,同样,多个消费者(consumers)也能从同一个队列(queue)中获取数据

l 消费(Consuming)和获取消息是一样的意思。一个消费者(consumer)就是一个等待获取消息的程序

第三步:源码

包括两部分源码,源码都有注释,自己看,不多说

Consumer源码以及注释

namespace RabbitMQServer
{
    /// <summary>
    /// 此为消费者服务端端,包含接受处理消息,并告知客户端已经处理结束。
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //创建目标,并将目标地址、用户名、密码记录
                var factory = new ConnectionFactory();
                factory.HostName = "XXX.XXX.XXX.XXX";
               factory.UserName = "XXX";
               factory.Password = "XXX";
                //建立实例连接
                var connection = factory.CreateConnection();
                //建立连接RabbitMQ通道
                var channel = connection.CreateModel();
                //创建队列“send”,用于接收客户端发送过来的信息,与客户端的发送队列同名
                channel.QueueDeclare("send",true,false,false,null);
                //创建队列“receive”,用于发送至客户端的信息,与客户端的接收队列同名
                channel.QueueDeclare("receive",true,false,false,null);
                //消息持久化
                var properties = channel.CreateBasicProperties();
                properties.SetPersistent(true);
                //用于接收消息
                var consumer = new QueueingBasicConsumer(channel);
                //第二个参数false表示需要回执给rabbitmq,否则rabbitmq一直保存
                channel.BasicConsume("send",false, consumer);
                Console.WriteLine(" waiting for message.");
                while (true)
                {
                    //接收消息并处理
                    var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine(DateTime.Now.ToString() +":Received {0}", message);
                    //消息处理完成后告诉客户端我已收到消息
                    var body1 = Encoding.UTF8.GetBytes("I have received the message");
                    channel.BasicPublish("","receive",null, body1);
                    Console.WriteLine(DateTime.Now.ToString() +" send:{0}","I have received the message");
                    //处理完了回执给rabbitmq,如果没有这行代码,RabbitMQ会一直存储这条消息
                    channel.BasicAck(ea.DeliveryTag, true);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Console.ReadKey();
            }
        }
    }
}

Producer源码及注释:

namespace RabbitMQClient
{
    /// <summary>
    /// 此为生产者客户端,包含发送,确认接收。
    /// </summary>
    class Program
    {
        //连接RabbitMQ通道
        static IModel channel;
        //要发送的信息(二进制)
        static byte[] body1;
        //要发送的信息(字符串)
        static string message1;
        //接收确认信息
        static QueueingBasicConsumer consumer;
        static void Main(string[] args)
        {
            try
            {
                //创建目标,并将目标地址、用户名、密码记录
                var factory = new ConnectionFactory();
                factory.HostName = "XXX.XXX.XXX.XXX";
                factory.UserName = "XXX";
                factory.Password = "XXX";
                //建立实例连接
                var connection = factory.CreateConnection();
                //建立连接RabbitMQ通道
                channel = connection.CreateModel();
                //创建发送队列“send”,所有需要发送数据都通过这个队列
                channel.QueueDeclare("send",false,false,false,null);
                //创建接收队列“receive”,所有需要发送数据都通过这个队列
                channel.QueueDeclare("receive",false,false,false,null);
                //用于接收消息
                consumer = new QueueingBasicConsumer(channel);
                //需要发送的字符串
                message1 = "Hello tt";
                //将字符串转byte
                body1 = Encoding.UTF8.GetBytes(message1);
                //创建一个Timer,每隔十秒向RabbitMQ发送一次消息
                Timer SendMessageTimer =new Timer(SendMessage,null, 0, 10000);
                //开启一个线程,专门接收消息
                Thread thread = new Thread(delegate () { ReceiveMessage(); });
                thread.IsBackground = true;
                thread.Start();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.ReadKey();
        }
        //发送RabbitMQ消息过程
        static void SendMessage(object o)
        {
            try
            {
                //向RabbitMQ发送消息,用send队列
                channel.BasicPublish("","send",null, body1);
                Console.WriteLine(DateTime.Now.ToString() +" send:{0}", message1);
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
        //接收RabbitMQ消息过程
        static void ReceiveMessage()
        {
            try
            {
                //第二个参数false表示需要回执给rabbitmq,否则rabbitmq一直保存
                channel.BasicConsume("receive",false, consumer);
                while (true)
                {
                    var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine(DateTime.Now.ToString() +":Received {0}", message);
                    //处理完了回执给rabbitmq,如果没有这行代码,RabbitMQ会一直存储这条消息
                    channel.BasicAck(ea.DeliveryTag, true);
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}


运行后效果如下:

producer端:

 

consumer端:


此外,通过命令可以查看当前RabbitMQ未被处理的队列消息数量,如图:


第四部分:其他部分

1、消息响应

当处理一个比较耗时得任务的时候,我们想知道消费者(consumers)是否运行到一半就挂掉,因此需要消息响应。具体由以上两行代码实现:

channel.BasicConsume("send",false, consumer);//第二个参数如果是true表示不需要消息响应,RabbitMQ将消息给customer后就不管了;false表示需要消息响应,配合下一行代码实现。

channel.BasicAck(ea.DeliveryTag, true);//处理完了回执给rabbitmq,如果没有这行代码,RabbitMQ会一直存储这条消息

2、消息持久化

消息响应保证了即使consumer都挂掉,消息还会在RabbitMQ中存储,若RabbitMQ与consumer都挂了该如何操作,需要持久化操作。通过几行代码实现:

channel.queueDeclare("receive", true, false, false, null);//第二个参数标记为false表示不持久化,true表示持久化,会通知RabbitMQ将信息存储在磁盘上。

var properties = channel.CreateBasicProperties();

properties.SetPersistent(true);

3、轮询分发

当开启多个consumer时,RabbitMQ会根据工作情况,将信息均匀分发给多个consumer。

4、生产者消息响应

可以采用conform模式完成生产者响应,生产者向RabbitMQ发送消息后,若RabbitMQ收到消息会给个反馈表示我收到了,具体代码示例为:

                channel.ConfirmSelect();
                //向RabbitMQ发送消息,用send队列
                channel.BasicPublish("", "send", null, body1);
                if(channel.WaitForConfirms())
                {
                    Console.WriteLine(DateTime.Now.ToString() + "Send sucess");
                }
                else
                {
                    Console.WriteLine(DateTime.Now.ToString() + "Send false");
                }


 

RabbitMQ-3.4.1安装文件(32/64位,linux) RabbitMQ-3.4.1安装文件; 包括32/64位,linux的版本; 附带:RabbitMQ-3.4.1安装手册 立即下载

相关推荐

rabbitmq-java-client-3.4.1.zip

消息队列的开源jar包,将该jar放入lib文件夹下就可以使用消息队列了

RabbitMq 之 RabbitMQ.Client (.Net Core)

源码

菜鸟厚非 1302

rabbitmq-client.jar

rabbitmq的javaClient库,导入到项目中便可使用

Windows下载安装RabbitMQ客户端(2024最新篇)

打开任务资源管理器Win10,WIn11 的快捷键都是Ctrl+Shift+Esc,找到rabbitmq服务-右键-开始/重新启动。选择图中选中进行下载,最后会下载一个rabbitmq-server-x.x.x的安装包文件,注意要放到无中文路径下,避免有问题。【注意】不要安装在中文或带空格的文件路径下,双击下载的安装包rabbitmq-server-x.x.x。安装路径,我这里又新建了一层RabbitMQ-Server,然后无脑下一步。,我这里是64位的就下载64-bit对应的,会看到右上角已经在下载了。

A的博客 9415

RabbitMQ.NET.Client

.NET引用开源第三方队列组件,可快速处理高并发,提升程序性能,小巧而好用。对应用于互联网电商等平台使用,是非常不错的选择

RabbitMqHelper.cs+RabbitMQ.Client.dll

(C#/.Net版) RabbitMqHelper 帮助类,外加 RabbitMQ.Client.dll,亲手完美封装的类库非常好用,欢迎下载!

吐血整理,rabbitmq超简单下载安装

7,使用命令:netstat -ntlp。如果想下载, rabbitmq3.8.5, 则对应的erlang语言的版本范围为21.3 到 23.x。假设安装到centos7, rabbitmq就是3.8.5. 选一个23.x的版本。2,能够正常启动,先ctrl + c 退出,然后执行下面命令把web管理功能的插件安装。1,先使用命令查看是否能够启动。

qq_45860901的博客 2618

大模型训练中的AllReduce:从原理到实战,如何优化你的分布式训练效率

本文深入解析了大模型分布式训练的核心通信操作AllReduce,特别是高效的Ring All-Reduce算法原理。文章从实战角度出发,探讨了如何通过通信计算重叠、梯度累积策略、NCCL库调优以及混合并行通信优化等手段,有效降低通信开销,从而显著提升大模型训练效率。

julia4scientist的博客 524

RabbitMQ下载与配置

2)创建服务器连接:ConnectionFactory 是一个非常方便的工厂类,可用来创建到 RabbitMQ 的默认连接(主机名为“localhost”)。3)由于 RabbitMQ 将会通过异步的方式向我们推送消息,因此我们需要提供了一个回调,该回调将对消息进行缓冲,直到我们做好准备接收它们为止。第二步,我们来模拟一个最简单的场景,一个生产者发送消息到队列中,一个消费者从队列中读取消息并打印。在消息发送的过程中,也可以使用 RabbitMQ 的管理面板查看到消息的走势图,如下所示。

kelvin的博客 3700

利用Civil3D装配设计器(SAC)建设高度形状自适应挡土墙

之前的模型都是点线,最后加一个形状,形成面。再根据现场测得的挡土墙的墙脚的点生成中心线(alignment),在中心线的基础上生成在现有地面(existing ground level)的高程(profile)。简单的说,该墙的墙趾啊,墙踵啊,基底下面那个把儿啊,都是随着高度变化的,而高度是随着下面这个高程图变化的。接着出现角度和Y的文本框,角度92,y 值随便写一个,然后重要的是,高程目标选路面(优先于Y值)。意思是P2的高度,也就是路面的高程,减去P10,墙脚高程,再减去墙脚埋进地里的深度0.8m。

测量老覃 的博客 1131

巨某量引擎后台登录实战笔记 | Playwright自动化框架

自动化框架、Playwright、滑块、巨某量引擎、抖某音系

什么都会一点。 2080

二、RabbitMQ安装和卸载

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34393428的博客 3981

论文笔记:Group Equivariant Convolutional Networks

Group Equivariant Convolutional Networks 1、四个问题 要解决什么问题? 对卷积神经网络进行扩展,并提出一个在特定的变换(旋转、平移等,也可表示为一个特殊的群)下具有等变性的网络。 用了什么方法解决? 提出了一种新的卷积神经网络结构——群等变卷积神经网络(Group equivariant Convolutional Neural Network)...

hongbin_xu的博客 1万+

[rabbitMQ]二、rabbitMQ的安装和配置

官网地址:https://www.rabbitmq.com/ windows安装 1.安装Erlang: 下载:http://www.erlang.org/download/otp_win64_22.2.exe(http://www.erlang.org/download/otp_win64_22.2.exe) 没啥好说的,直接安装。 2.安装rabbitmq: 下载:https://www.rabbitmq.com/install-windows.html(https://www.rabbitmq.com

qq_39545346的博客 261

机器人中的数值优化(一)—— 数学优化、凸集合与凸函数

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例。

慕羽★的博客 2521

AUTOSAR从入门到精通-汽车电子电气架构(EEA)

EEA(Electrical/Electronic Architecture),电子电气架构,是首先由德尔福公司提出的,集合汽车的电子电气系统原理设计、中央电器盒的设计、连接器的设计、电子电气分配系统等设计为一体的整车电子电气解决方案的概念。通过EEA的设计,可将动力总成、驱动信息、娱乐信息等车身信息转化为实际的电源分配的物理布局、信号网络、数据网络、诊断、容错、能量管理等的电子电气解决方案。

getusushu的博客 858

RabbitMQ学习(二)——Linux下安装RabbitMQ

RabbitMQ是采用 Erlang语言开发的,所以系统环境必须提供 Erlang环境,需要是安装 Erlang。默认情况下,rabbitmq没有安装web端的客户端软件,需要安装才可以生效。首先将下载好的文件上传到服务器,创建一个文件夹用来存放文件,然后切换到。:可以登录控制台、查看所有信息、并对rabbitmq进行管理。安装启动RabbitMQWeb管理界面。插件,首先安装该插件,然后解压安装。登录控制台,查看所有信息。5、启动RabbitMQ服务。4、安装RabbitMQ。然后安装RabbitMQ。

m0_59350665的博客 1896

vue2/3 - 详细实现内网使用离线百度地图功能,百度地图如何离线加载详细教程(内网部署及使用),在vue中无需网络离线使用百度地图相关功能,提供最新完整的瓦片资源下载及相关工具(示例代码,一键复制

vue,vue2,vue3,百度地图,离线使用百度地图,百度地图瓦片官方下载,vue内网使用百度地图离线无网络,断网情况下使用百度地图,vue离线百度地图教程,如何实现内网部署百度地图,无需联网离线使用,vue+ts实现离线百度地图 内网离线百度地图,如何在百度地图Vue项目中下载离线地图,百度离线地图加载不出来,百度地图离线使用不显示怎么办,怎么解决vue内网使用离线百度地图加载失败问题,vue实现离线地图+百度瓦片,vue引入百度离线地图,vue项目如何使用离线百度地图和自定义地图样式,百度离线地图的下

✅ 精选推荐文章 1万+

RabbitMQ(二) 安装rabbitMQ

一 、安装 Erlang 因为我使用的是windows7 ,所以这边是win7的安装方式 Erlang 下载地址 http://www.erlang.org/downloads 二、安装Erlang 1、打开otp_win64_20.2.exe 2、配置环境变量 3、查看Erlang版本 二 、安装 RabbitMQ 下载地址: https://www.rabbitmq.c...

qq_38360901的博客 185

TPAMI 2024 | 重新思考多焦点图像融合中客观评价指标的有效性:一种基于统计的方法

作为一种延长光学镜头景深(DOF)的有效技术,多焦点图像融合最近成为图像处理社区的一个活跃话题。然而,该领域仍然存在一个未解决的主要问题,即缺乏选择客观评价指标的通用标准。因此,不同研究中使用的指标往往差异显著,导致难以实现公正的评估。为了解决这个问题,本文提出了一种基于统计的方法来验证多焦点图像融合中客观指标的有效性。核心思想是采用统计相关性度量来评估某个融合指标与一些流行的全参考图像质量评估模型之间的性能一致性。

小白学视觉 329

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

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

RabbitMQ从入门到精通【二】RabbitMQ安装

一、RabbitMQ安装准备 二、Windows安装 三、Linux安装 四、集群部署

PowerfulQ的博客 350

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

rabbitmq集群部署之路【二】rabbitmq安装篇

本人所负责的系统是分布式系统,用到了消息队列rabbitmq。起初为了快速验证业务功能,只简单部署了一台rabbitmq服务器,显然存在着单点故障风险,无法应用于生产环境。本人结合项目实际情况经过一翻研究,决定对rabbitmq服务器进行集群部署,进一步部署nginx负载均衡代理转发,实现服务高可用。此篇为系列第二篇rabbitmq安装。 rabbitmq安装需要erlang环境,并且两者之间的版本需要正确匹配。这里采用的版本为RabbitMQ 3.9.7和Erlang 24.0。安装过程采用root用户

guiripei的专栏 4718

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

安装RabbitMQ(二)

RabbitMQ的简易安装 前一篇博文的RabbitMQ安装有点复杂,经过搜索发现简单的安装方式如下。 1.Erlang Yum Repos 基于 SSL 高版本包含插件 rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm wget -O /etc/yum.repos.d/epel-erl...

rui888的博客 7242

RabbitMQ教程(二) RabbitMQ 安装

https://gitee.com/fakerlove/rabbitmq 文章目录 2.RabbitMQ 的安装2.1 RabbitMQ简介应用场景AMQP协议常用交换器 2.2 RabbitMQ 的安装2.2.1 下载2.2.2 下载的安装包2.2.3 安装步骤1.将...

摆渡人 760

RabbitMQ (二)docker安装rabbitMQ

1 安装 rabbitMQ 文件目录如下图: 插件官网下载地址 docker-compose.yml 内容: version: '3.3' services: rabbitmq: image: 'daocloud.io/library/rabbitmq:3.8-management' # hostname: my_rabbitmq # container_name: nacos-server-2.0.2 ...

fmi110的博客 590

二、 安装及配置RabbitMQ

可登录管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)可以采用yum安装方式:yum install socat,我们这里采用rpm安装方式。可登录管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。可登录管理控制台, 同时可以对policy进行管理。rabbitmq安装依赖于socat,所以需要下载socat。在安装rabbitmq之前需要先安装socat,否则,报错。仅可登录管理控制台,无法看到节点信息,也无法对策略进行管理。

stert的博客 318
上一篇: RabbitMQ安装和使用(一)
下一篇: RabbitMQ安装和使用(三)
wangwtotao
博客等级 码龄17年 7粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值