.NET6 RabbitMQ
首先要安装好RabbitMQ,并启动起来。
1、消费者 代码
try { WriteLineTitle($"---------【Receiver】,Start...---------"); IConnectionFactory factory = new ConnectionFactory//创建连接工厂对象 { HostName = AppsettingGet("RabbitMQ:HostName"),// "192.168.158.209",//IP地址 Port = Convert.ToInt32(AppsettingGet("RabbitMQ:Port")),//5672,//端口号 UserName = AppsettingGet("RabbitMQ:UserName"),//"admin",//用户账号 Password = AppsettingGet("RabbitMQ:Password"),//"123456"//用户密码 }; IConnection conn = factory.CreateConnection(); IModel channel = conn.CreateModel(); string name = "JavaUserCenter"; //声明一个队列 channel.QueueDeclare( queue: name,//消息队列名称 durable: true,//是否持久化,true持久化,队列会保存磁盘,服务器重启时可以保证不丢失相关信息。 exclusive: false,//是否排他,true排他的,如果一个队列声明为排他队列,该队列仅对首次声明它的连接可见,并在连接断开时自动删除. autoDelete: false,//是否自动删除。true是自动删除。自动删除的前提是:致少有一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会自动删除. arguments: null ////设置队列的一些其它参数 ); //创建消费者对象 var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { byte[] msgArry = ea.Body.ToArray();//接收到的消息 string msg = System.Text.Encoding.UTF8.GetString(msgArry); WriteLine_($"{msg}"); }; //消费者开启监听 channel.BasicConsume(name, true, consumer); WriteLineTitle($"---------【Receiver】,Start success---------"); Console.ReadKey(); channel.Dispose(); conn.Close(); WriteLineTitle("---------【Receiver】,close---------"); } catch (Exception ex) { WriteLineError_($"---------【Receiver】,Exception msg:{ex.ToString()}"); }
2、生产者 代码
WriteLineTitle($"---------【Sender】,Start success---------"); IConnectionFactory factory = new ConnectionFactory//创建连接工厂对象 { HostName = AppsettingGet("RabbitMQ:HostName"),// "192.168.158.209",//IP地址 Port = Convert.ToInt32(AppsettingGet("RabbitMQ:Port")),//5672,//端口号 UserName = AppsettingGet("RabbitMQ:UserName"),//"admin",//用户账号 Password = AppsettingGet("RabbitMQ:Password"),//"123456"//用户密码 }; IConnection con = factory.CreateConnection();//创建连接对象 IModel channel = con.CreateModel();//创建连接会话对象 string name = "JavaUserCenter"; //声明一个队列 channel.QueueDeclare( queue: name,//消息队列名称 durable: true,//是否持久化,true持久化,队列会保存磁盘,服务器重启时可以保证不丢失相关信息。 exclusive: false,//是否排他,true排他的,如果一个队列声明为排他队列,该队列仅对首次声明它的连接可见,并在连接断开时自动删除. autoDelete: false,//是否自动删除。true是自动删除。自动删除的前提是:致少有一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会自动删除. arguments: null //设置队列的一些其它参数 ); string str = string.Empty; do { WriteLine_("请输入发送的内容,并且按回车发送:"); str = Console.ReadLine(); //消息内容 byte[] body = System.Text.Encoding.UTF8.GetBytes(str); //发送消息 channel.BasicPublish("", name, null, body); WriteLine_("消息发送成功!"); Console.WriteLine(""); } while (str.Trim().ToLower() != "exit"); con.Close(); channel.Close();
以上代码是简单模式,RabbitMQ有很多模式,剩下的自己去试试吧。也可以参考下面这篇文章,不过有些问题大家自己注意下,
1、文档里面没做持久化,这个在使用的时候一定要做持久化。
2、 byte[] message = ea.Body;这个代码现在不可行,要写成:ea.Body.ToArray();
其它问题大家自己遇到在处理吧。
Reference:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)