.Net中简单地使用RabbitMQ消息队列
一.简介
消息队列(Message Queue),指的是消息传递之间的容器,通常使用场景是,不需要立刻得到结果,但有需要对并发量进行控制的时候。
有很多组件可以实现消息队列,这里使用RabbitMQ。本文是为了简单记录一下.Net (Core)中如何通过EasyNetQ去使用RabbitMQ。
二.使用
1.环境准备
下载安装Erlang和RabbitMQ,我这里是在Windows上安装的,可以参考 《在Windows上安装RabbitMQ 指南》 。
准备两个控制台应用(Publisher和Subscriber)和一个类库(Messages)。
通过Nuget,给Publisher和Subscriber项目安装EasyNetQ。
在Messages类库中,添加一个类。
public class TextMessage { public string Text { get; set; } }
2.Publisher项目
class Program { public static void Main(string[] args) { var connStr = "host=127.0.0.1;virtualHost=EDCVHOST;username=admin;password=123456"; using (var bus = RabbitHutch.CreateBus(connStr)) { var input = ""; Console.WriteLine("Please enter a message. 'Quit' to quit."); while ((input = Console.ReadLine()) != "Quit") { bus.PubSub.Publish(new TextMessage { Text = input }); } } } }
通过EasyNetQ去连接RabbitMQ,然后使用它创建的IBus实例来发布消息。这里的通过用户在控制台输入字符串来发送消息。
3.Subscriber项目
class Program { public static void Main(string[] args) { var connStr = "host=127.0.0.1;virtualHost=EDCVHOST;username=admin;password=123456"; using (var bus = RabbitHutch.CreateBus(connStr)) { bus.PubSub.Subscribe<TextMessage>("my_test_subscriptionid", HandleTextMessage); Console.WriteLine("Listening for messages. Hit <return> to quit."); Console.ReadLine(); } } public static void HandleTextMessage(TextMessage textMessage) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Got message: {0}", textMessage.Text); Console.ResetColor(); } }
这里是订阅消息,只要程序在运行中,就会一直处于监听状态。只要发布者发布了指定类型的消息,这里就可以实时获取到,然后打印出来。
4.测试
运行两个控制台应用。在Publisher中输入字符,Subscriber就会实时获取。
进入到RabbitMQ界面查看,在connections中可以看到目前两个客户端都在运行中(running)。
在Queues中,看到目前注册的队列只有一个。
三.总结
1.在.Net中可以使用EasyNetQ插件来使用RabbitMQ。
2.本文的例子涉及到了消息队列的订阅发布模式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构