RabbitMQ系列(二)-点对点模式

RabbitMQ系列(二)-点对点模式

上一篇 : RabbitMQ系列(一)-单机部署

下一篇 : RabbitMQ系列(三)-工作队列模式

一、 介绍

1. Rabbitmq作为一个优秀的消息队列中间件,提供很多种消息生产消费的工作模式
2. 点对点模式只是其中的一种. 指的是一个同一时刻,一个生产者,一个队列,一个消费者.
3. 使用默认的default交换机,rootingkey是ququename
4. 下图是官网对这个模式介绍的一张图片.

在这里插入图片描述

二、 测试

2.1 生产者

  1. 首先安装Nuget包–>RabbitMQ.Client
  2. 生产者—>
static void Main(string[] args)
        {
            var factory = new ConnectionFactory
            {
                HostName = "192.168.3.20", # rabbit地址
                Port = 5672, # 如果改了端口的需要在这里指定
                UserName = "xxx", #登录名
                Password = "xxx", #密码
                VirtualHost = "/" #虚拟主机
            };
            #region 点对点
            string queueName = "OneToOne"; # 声名队列
            using var conn = factory.CreateConnection(); #创建连接
            using var channel = conn.CreateModel(); #创建channel信道
            channel.QueueDeclare(queue: queueName, # 声明队列
                                 durable: false,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);
            Console.WriteLine("请输入要发送的消息,如果发送完毕,输入ok即可.");
            var sendMsg = "";
            while (sendMsg != "ok")
            {
                sendMsg = Console.ReadLine();
                var body = Encoding.UTF8.GetBytes(sendMsg);
                channel.BasicPublish(exchange: "", # 发送消息
                                     routingKey: queueName,
                                     basicProperties: null,
                                     body: body);
                if (sendMsg == "ok")
                {
                    Console.WriteLine("消息发送结束,按任意键退出.");
                }
                else
                {
                    Console.WriteLine($"Send ====>{sendMsg}");
                }
            }
            #endregion

            Console.ReadKey();
        }

在这里插入图片描述

  1. 此时咱们看到消息已经发送到了rabbitmq中,队列名称OneToOne.至于交换机请看下图.

在这里插入图片描述

  1. 从上图可以看到,在不绑定交换机的情况下,一律使用的都是rabbitmq的默认交换机.rootingkey是队列名称

2.2 消费者

var factory = new ConnectionFactory
            {
                HostName = "192.168.3.20", # rabbit地址
                Port = 5672, # 如果改了端口的需要在这里指定
                UserName = "xxx", #登录名
                Password = "xxx", #密码
                VirtualHost = "/" #虚拟主机
            };
            #region 点对点
            string queueName = "OneToOne"; # 声名队列
            using var conn = factory.CreateConnection(); #创建连接
            using var channel = conn.CreateModel(); #创建channel信道
            channel.QueueDeclare(queue: queueName, # 声明队列
                                 durable: false,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);
            #消费者是以事件的方式订阅消息的
            var consumer = new EventingBasicConsumer(channel);
            consumer.Received += (model, ea) =>
            {
                var body = ea.Body.ToArray();
                var message = Encoding.UTF8.GetString(body);
                Console.WriteLine($"Received {message}");
            };
            channel.BasicConsume(queue: queueName, #消费完成通知rabbit
                                 autoAck: true,
                                 consumer: consumer);
            #endregion

            Console.ReadKey();

在这里插入图片描述

  1. 上两图可以看到消费完成后,rabbitmq的队列里面积压数清零了.

2.3 联动实时发送和消费测试

在这里插入图片描述

三、 总结

1. 上面博主介绍了点对点的工作模式和实现.
2. 但是实际上我们很少用这种方式,因为消费能力不足.只有一个生产者和一个消费者.
3. 但是在针对某些场景我们只能用点对点的方式,比如·强顺序消费·的场景.就只能点对点了. 要保证消息的顺序
4. 如有不对,欢迎指正.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值