rabbitmq之交换机fanout(c#)


rabbitmq之交换机fanout(c#)


fanout的主要功能是广播,他会将他收到的消息广播到它已知的所有队列当中
这个特性我们可以适用于群发的情况,像官方例子当中的简单日志广播,也可以用于接受数据源(如硬件采集到的数据)提供的数据,将其转发给数据库用于保存,转发给程序用于显示等等
其过程如下
消息传输过程
publish的实现代码如下

            var factory = new ConnectionFactory();
            {
                factory.HostName = "localhost";
                factory.UserName = "guest";
                factory.Password = "guest";
            }
            //从连接工程中打开一个连接
            using (var connection = factory.CreateConnection())
                //创建一个channel
            using (var channel = connection.CreateModel())
            {
                //声明交换机
                channel.ExchangeDeclare(exchange: "logs", type: "fanout");
                var message = "hello rabbit";
                //将string类型的消息转化为bytes
                var body = Encoding.UTF8.GetBytes(message);
                for (int i = 0; i < 20; i++)
                {
                    //发布
                    //参数说明,交换机类型,routekey,是否持久化,消息
                    channel.BasicPublish(exchange: "logs",
                                     routingKey: "",
                                     basicProperties: null,
                                     body: body);
                    Console.WriteLine("已发送"+message);
                    Thread.Sleep(600);
                }

            }

consumer实现如下

            using (var channel = connection.CreateModel())
            {
                //同样要声明交换机的类型及名称,不然publish和consumer匹配不上
                channel.ExchangeDeclare(exchange: "logs", type: "fanout");
                //声明一个队列,这个队列的名称随机
                var queueName = channel.QueueDeclare().QueueName;
                //将这个队列绑定(bind)到交换机上面
                channel.QueueBind(queue: queueName,
                                  exchange: "logs",
                                  routingKey: "");
                //声明一个consumer
                var consumer = new EventingBasicConsumer(channel);
                //一个委托,只要这个程序不被杀死,这段代码便一直监听rabbitmq,有消息就实时收到
                consumer.Received += (model, ea) =>
                {
                    //处理收到的数据并打印
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine(message);
                };
                
                channel.BasicConsume(queue: queueName,
                                     noAck: true,
                                     consumer: consumer);
                Console.ReadLine();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值