RabbitMQ 路由版本
=========生产者代码:
static void Main(string[] args) { //创建连接对象 using var connection = R_MQHelper.GetConnection(); //创建信道 using var channel = connection.CreateModel(); //创建交换机 channel.ExchangeDeclare("chn_direct_exchange","direct",false,false,null); //创建队列 //创建队列 channel.QueueDeclare("chn_direct_queue001", false, false, false, null); channel.QueueDeclare("chn_direct_queue002", false, false, false, null); channel.QueueDeclare("chn_direct_queue003", false, false, false, null); //把队列绑定到交换机(就是队列订阅交换机) channel.QueueBind("chn_direct_queue001", "chn_direct_exchange","info", null);//设置 routingKey。不同的消息可发往不同队列,info规定为正常数据 channel.QueueBind("chn_direct_queue002", "chn_direct_exchange", "warn", null);//warn规定为报警数据 channel.QueueBind("chn_direct_queue003", "chn_direct_exchange", "error", null);//error 规定为不信任数据 for (int i = 0; i < 15; i++) { //发送消息 //根据已订阅交换机队列的routingKey指定发送消息 if (i<5) { string msg = $"携带毒品,枪支,子弹:{i + 1}"; var body = Encoding.UTF8.GetBytes(msg); channel.BasicPublish("chn_direct_exchange", "warn", false, null, body); Console.WriteLine("warn:" + msg); } else if (i<10 && i>5) { string msg = $"安全,无危险:{i + 1}"; var body = Encoding.UTF8.GetBytes(msg); channel.BasicPublish("chn_direct_exchange", "info", false, null, body); Console.WriteLine("info:" + msg); } else { string msg = $"程序出现错误:{i + 1}"; var body = Encoding.UTF8.GetBytes(msg); channel.BasicPublish("chn_direct_exchange", "error", false, null, body); Console.WriteLine("error:" + msg); } } Console.ReadKey(); }
========消费者代码:
static void Main(string[] args) { //创建连接对象 using var connection = R_MQHelper.GetConnection(); //创建信道 using var channel = connection.CreateModel(); //创建交换机 channel.ExchangeDeclare("chn_direct_exchange", "direct", false, false, null); //创建队列 //创建队列 channel.QueueDeclare("chn_direct_queue001", false, false, false, null); channel.QueueDeclare("chn_direct_queue002", false, false, false, null); channel.QueueDeclare("chn_direct_queue003", false, false, false, null); //把队列绑定到交换机(就是队列订阅交换机) channel.QueueBind("chn_direct_queue001", "chn_direct_exchange", "info", null);//设置 routingKey。不同的消息可发往不同队列,info规定为正常数据 channel.QueueBind("chn_direct_queue002", "chn_direct_exchange", "warn", null);//warn规定为报警数据 channel.QueueBind("chn_direct_queue003", "chn_direct_exchange", "error", null);//error 规定为不信任数据 //事件对象 var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { //获取消息 var body = ea.Body;//获取队列中消息主体 var msg = Encoding.UTF8.GetString(body.ToArray()); var routingKey = ea.RoutingKey;//队列名 Console.WriteLine($"recive message is :{msg} ,routingKey is: {routingKey}"); }; //消费消息 //可以一次消费多个队列消息(也可以消费单个队列) channel.BasicConsume("chn_direct_queue001", true, consumer); channel.BasicConsume("chn_direct_queue002", true, consumer); channel.BasicConsume("chn_direct_queue003", true, consumer); Console.ReadKey(); }
posted on 2022-08-19 16:34 泰坦尼克号上的活龙虾 阅读(14) 评论(0) 收藏 举报
浙公网安备 33010602011771号