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)    收藏  举报

导航