zoukankan      html  css  js  c++  java
  • RabbitMQ消息机制广播分发

            public static void SendMessage()
            {
                var factory = new ConnectionFactory();
                factory.HostName = "192.168.1.117";
                factory.UserName = "witbank";
                factory.Password = "123456";
                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        const string EXCHANGE_NAME = "logs";
                        const string ROUTING_KEY = "";
                        channel.ExchangeDeclare(EXCHANGE_NAME, "fanout");//广播
                        while (true)
                        {
                            string message = "请输入要发送的信息";
    
                            Console.WriteLine(message);
                            message = Console.ReadLine();
                            var body = Encoding.UTF8.GetBytes(message);
                            channel.BasicPublish(EXCHANGE_NAME, ROUTING_KEY, null, body);//不需要指定routing key,设置了fanout,指了也没有用.
                            Console.WriteLine(" [x] Sent {0}", message);
                        }
                    }
                }
            }
    

      

            public static void ReceiveMessage()
            {
                var factory = new ConnectionFactory();
                factory.HostName = "192.168.1.117";
                factory.UserName = "witbank";
                factory.Password = "123456";
                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        const string EXCHANGE_NAME = "logs";
                        const string ROUTING_KEY = "";
                        channel.ExchangeDeclare(EXCHANGE_NAME, "fanout");//广播
                        QueueDeclareOk queueOk = channel.QueueDeclare();//每当Consumer连接时,我们需要一个新的,空的queue。因为我们不对老的log感兴趣。幸运的是,如果在声明queue时不指定名字,那么RabbitMQ会随机为我们选择这个名字。
                        ////现在我们已经创建了fanout类型的exchange和没有名字的queue(实际上是RabbitMQ帮我们取了名字)。
                        ////那exchange怎么样知道它的Message发送到哪个queue呢?答案就是通过bindings:绑定。
                        string queueName = queueOk.QueueName;//得到RabbitMQ帮我们取了名字
                        channel.QueueBind(queueName, EXCHANGE_NAME, ROUTING_KEY);//不需要指定routing key,设置了fanout,指了也没有用.
                        var consumer = new QueueingBasicConsumer(channel);
                        channel.BasicConsume(queueName, true, consumer);
                        Console.WriteLine(" [*] Waiting for messages." + "To exit press CTRL+C");
                        while (true)
                        {
                            var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//挂起的操作
                            var body = ea.Body;
                            var message = Encoding.UTF8.GetString(body);
                            Console.WriteLine(" [x] Received {0}", message);
                        }
                    }
                }
            }
    

      

  • 相关阅读:
    做了一个非常小的WPS插件
    小幸福
    被迫积极
    将要从csdn搬过来了!
    游戏框架设计Ⅰ—— 游戏中的事件机制
    *VB中实现OpenGL的截屏(glReadPixels)
    *D3D中把场景保存为图片的方法
    *vc中检测内存泄露的工具VLD(visual leak detector) 转
    纯虚函数能为private吗?
    vc中调用Com组件的方法详解
  • 原文地址:https://www.cnblogs.com/happygx/p/6114077.html
Copyright © 2011-2022 走看看