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);
                    }
                }
            }
        }

  

转载于:https://www.cnblogs.com/happygx/p/6114077.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值