RabbitMQ Demo

1.首先安装RabbitMQ服务器,项目中添加RabbitMQ客户端库。以下是一个简单的示例,演示了如何在C#应用程序中发送和接收消息:
using RabbitMQ.Client;
using System;
using System.Text;class Program
{static void Main(){var factory = new ConnectionFactory() { HostName = "localhost" };using (var connection = factory.CreateConnection())using (var channel = connection.CreateModel()){channel.QueueDeclare(queue: "hello",durable: false,exclusive: false,autoDelete: false,arguments: null);string message = "Hello, RabbitMQ!";var body = Encoding.UTF8.GetBytes(message);channel.BasicPublish(exchange: "",routingKey: "hello",basicProperties: null,body: body);Console.WriteLine(" [x] Sent {0}", message);}Console.WriteLine(" Press [enter] to exit.");Console.ReadLine();}
}

上述代码演示了一个简单的生产者,它连接到本地的RabbitMQ服务器,声明一个名为"hello"的队列,并向该队列发送一条消息。

channel.QueueDeclare方法中,各参数的含义如下:

  1. queue:队列的名称。这是必需的参数,用于指定要声明的队列的名称。

  2. durable:指定队列是否持久化。如果设置为true,RabbitMQ会在服务器重启后保留该队列,否则在服务器重启后队列将被删除。默认值为false。

  3. exclusive:指定队列是否为独占队列。如果设置为true,只有声明该队列的连接能够使用这个队列,连接关闭后队列将被删除。默认值为false。

  4. autoDelete:指定当最后一个消费者断开连接之后,队列是否自动删除。如果设置为true,当最后一个消费者断开连接后,队列将被自动删除。默认值为false。

  5. arguments:用于设置其他参数的可选参数。例如,可以使用arguments来设置队列的TTL(time to live)、死信交换机等特殊属性。

通过这些参数,您可以根据实际需求来声明一个队列,例如设置队列的持久化属性、独占性质和自动删除行为,以及其他特殊的队列参数。

channel.BasicPublish方法中,各参数的含义如下:

  1. exchange:消息发送到的交换机的名称。交换机负责将消息路由到队列。空字符串表示默认交换机,消息会直接路由到指定的队列;非空字符串表示使用指定名称的交换机。

  2. routingKey:路由键,用于将消息从交换机路由到队列。当消息发送到交换机时,交换机会根据路由键将消息路由到一个或多个队列。

  3. basicProperties:消息的基本属性。可以设置消息的各种属性,比如消息的持久化、优先级、过期时间等。通常情况下,可以将其设置为null,表示使用默认的消息属性。

  4. body:消息的内容。以字节数组的形式表示消息的实际内容。

通过这些参数,您可以将指定消息发送到交换机、使用的路由键,以及设置消息的属性和内容。这样就可以灵活地控制消息的发送行为。

2.下面是一个简单的消费者示例,它从队列中接收消息:
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;class Program
{static void Main(){var factory = new ConnectionFactory() { HostName = "localhost" };using (var connection = factory.CreateConnection())using (var channel = connection.CreateModel()){channel.QueueDeclare(queue: "hello",durable: false,exclusive: false,autoDelete: false,arguments: null);var consumer = new EventingBasicConsumer(channel);consumer.Received += (model, ea) =>{var body = ea.Body.ToArray();var message = Encoding.UTF8.GetString(body);Console.WriteLine(" [x] Received {0}", message);};channel.BasicConsume(queue: "hello",autoAck: true,consumer: consumer);Console.WriteLine(" Press [enter] to exit.");Console.ReadLine();}}
}

上述代码为一个简单的消费者,它连接到本地的RabbitMQ服务器,声明一个名为"hello"的队列,并开始从该队列接收消息。

ex:

事件处理器,用于处理RabbitMQ消费者接收到消息的情况:

  1. consumer.Received += (model, ea) =>:事件订阅语法,表示当消费者接收到消息时触发的事件。一旦消费者接收到消息,就会执行下面的花括号内的代码。这行代码是用于订阅指

  2. queue: "hello":表示要订阅的队列名称为"hello",即消费者将从名为"hello"的队列中接收消息。

  3. autoAck: true:表示是否自动确认消息。如果设置为true,当消费者接收到消息后,会立即向RabbitMQ服务器发送一个消息确认,告知服务器该消息已被处理。这意味着一旦消息被发送到消费者,RabbitMQ就会将其视为已成功处理,即使消费者尚未完成对消息的处理。这种方式可能会导致消息丢失或重复处理,因此在实际场景中需要谨慎使用。

    • consumer: consumer:表示用于处理接收到消息的消费者对象。在这里,您可以传入之前创建的消费者对象,以便让RabbitMQ知道收到消息后将其交给哪个消费者进行处理。

3.Demo为C#应用程序中使用RabbitMQ进行消息的发送和接收。在实际环境中,要考虑更多因素--错误处理、连接管理、序列化和反序列化等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch实战教程(二十八)-交通标志识别

0. 前言 在道路交通场景中,交通标志识别作为驾驶辅助系统与无人驾驶车辆中不可缺少的技术,为车辆行驶中提供了安全保障。在道路上行驶的车辆,道路周围的环境包括许多重要的交通标志信息,根据交通标志信息在道路上做出正确的驾驶行为,通常能够避免发生交通事故。交通标志识…

QT 显示tablewidgit和查询mysql结果显示

QT实战3:QTableWidget表头、内容字体大小、颜色、背景颜色等设置_qt中tablewidget如何设置编辑状态为浅色-CSDN博客 Qt中MySQL的使用实例以及数据库遍历-CSDN博客

Scala爬虫实战:采集网易云音乐热门歌单数据

导言 网易云音乐是一个备受欢迎的音乐平台,汇集了丰富的音乐资源和热门歌单。这些歌单涵盖了各种音乐风格和主题,为音乐爱好者提供了一个探索和分享音乐的平台。然而,有时我们可能需要从网易云音乐上获取歌单数据,以进行音乐推荐…

vscode文件跳转(vue项目)

在 .vue 文件中,点击组件名打开 方式1: 在 vue 组件名上,桉住ctrl 鼠标左键 // 重新打开一个tab 方式2: 在 vue 组件名上,桉住ctrl shift 鼠标左键 // 在右侧拆分,并打开一个tab .vue文件的跳转 按住 …

Python TCP服务端多线程接收RFID网络读卡器上传数据

本示例使用设备介绍:WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) #python通过缩进来表示代码块,不可以随意更改每行前面的空白,否则程序会运行错误!!!如果缩进不…

MATLAB|风玫瑰图

目录 扫一扫关注公众号 效果图 粉丝给的图: 复刻的图: 其他样式效果: 数据 绘图教程 绘制左边Y轴 绘制主、次网格和主、次刻度的极坐标区域。 添加刮风数据,添加数据和颜色、图列大小映射关系。 颜色条绘制​​​​​​…

虹科示波器 | 汽车免拆检测 | 2017款路虎发现车行驶中发动机抖动且加速无力

一、故障现象 一辆2017款路虎发现车,搭载3.0L发动机,累计行驶里程约为3.8万km。车主反映,车辆在行驶过程中突然出现发动机抖动且加速无力的现象,于是请求拖车救援。 二、故障诊断 拖车到店后首先试车,发动机怠速轻微抖…

【学习笔记】MySQL死锁及热点行问题

目录 案例优化思路死锁的一些记录笔记热点行问题 本文记录下关于MySQL优化的学习和一点点思考。 案例 一个并发比较大的下单接口; 包括 step1 扣减商品库存step2 生成订单数据step3 记录操作记录 伪代码如下,底层使用的是MySQL数据库,单体服务…

Linux应用开发基础知识——文件IO操作(三)

前言: 在 Linux 系统中,一切都是“文件”:普通文件、驱动程序、网络通信等等。 所有的操作,都是通过“文件 IO”来操作的。所以,很有必要掌握文件操作的常用接口。 目录 一、文件IO 1.什么是文件: 2.怎么…

【Android】画面卡顿优化列表流畅度一

卡顿渲染耗时如图: 卡顿表现有如下几个方面: 网络图片渲染耗时大上下滑动反应慢,甚至画面不动新增一页数据加载渲染时耗时比较大,上下滑动几乎没有反应,画面停止没有交互响应 背景 实际上这套数据加载逻辑已经运行…

绝对力作:解锁string的所有关键接口,万字深度解析!

W...Y的主页 😊 🍔前言: 通过博主的上篇文章,我相信大家已经认识了STL并且已经迫不及待想学习了,现在我们就走近STL的第一种类——string。 目录 为什么学习string类? C语言中的字符串 标准库中的str…

【机器学习】梯度下降预测波士顿房价

文章目录 前言一、数据集介绍二、预测房价代码1.引入库2.数据3.梯度下降 总结 前言 梯度下降算法学习。 一、数据集介绍 波士顿房价数据集:波士顿房价数据集,用于线性回归预测 二、预测房价代码 1.引入库 from sklearn.linear_model import Linear…

transaction事务使用

事务的特性 事务有以下四个特性,通常称为ACID: 原子性(Atomicity): 事务是一个不可分割的基本工作单位,在事务执行过程中,要么全部执行成功,要么全部失败回滚。 一致性(Consistenc…

A star算法

1. 算法的理解 1.2 a 星算法的基本的原理 a 星 是一种启发式搜索算法, 用于在地图中的两个目标点之间寻找最短的路径,它结合了最优先搜索和Dijkstra算法的特点,通过考虑从起点到当前点的距离(或者代价 g(n) ) 和估算…

筹码穿透率指标选股公式,衡量筹码抛压

在前面的文章中,介绍了博弈K线,它是根据筹码分布的原理结合普通K线的方法绘制出来的。当博弈K线的实体部分比较长的时候,说明当天穿越筹码密集区,有大量的筹码解套。通过引入换手率,可以衡量套牢盘的抛压程度。如果穿越…

unity 接收和发送Udp消息

因为需要用到unity和其他的程序交互,其他程序可以提供Udp消息,因此找了合适的相互连接方法。这里直接上代码。 工具类: using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Net; u…

Xcode 最好用的 11 个快捷键

今天来分享一下我觉得很好用的 Xcode 12 个快捷键 1. Command Shift O 快速打开,可让你快速导航到项目中的任何文件、函数、变量 2. Command Shift J 快速定位到当前代码所在的文件夹位置,并切换到项目导航器中显示 3. Command Shift Y 快速…

2011年03月31日 Go生态洞察:Godoc —— Go代码的文档化

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Oracle数据库调优实战:优化SQL查询的黄金法则!

在数据库应用中,SQL查询是最常见且最频繁执行的操作之一。然而,当数据量庞大、查询复杂度高时,SQL查询性能可能变得低效。为了提高数据库的响应速度和吞吐量,我们需要进行SQL查询的优化。下面将介绍Oracle数据库调优的黄金法则&am…

微前端:quankun

零: 前言 微前端可以将大应用拆分功能独立的微应用,可独立开发部署, 每个微应用可以采用自己的技术栈,这样更好维护和拓展。微前端也会存在跨域 权限控制 数据共享 性能(页面加载时间) 安全 多团队协作(一个团队负责一个页面或模…