RabbitMQ(三)——简单模式

RabbitMQ系列

RabbitMQ(一)——简介

RabbitMQ(二)——模式类型

RabbitMQ(三)——简单模式

RabbitMQ(四)——工作队列模式

RabbitMQ(五)——发布订阅模式

RabbitMQ(六)——路由模式

RabbitMQ(七)——主题模式

RabbitMQ(八)——消息确认

RabbitMQ(九)——消息持久化

RabbitMQ(十)——消息优先级

 

前言

  简单模式中有一个生产者一个消费者,这里分别是SimpleServer,SimpleClient.SimpleServer作为生产者,给队列发送消息,而SimpleClient作为消费者去消费消息。每条消息都是消费完就没了。

 

 

创建项目

  SimpleServer:

    1. 创建工厂ConnectionFactory并初始化,这里连接的是本地,远程只需改变地址即可,账号密码默认为guest。
    2. 使用工厂创建一个连接对象。
    3. 通过连接对象创建一个通道。
    4. 声明一个队列,用来存放消息,这里给队列命名为simple。
    5. 使用IModel.BasicPublish()向队列发布消息。

 

static void Main(string[] args)
        {
            //1.创建连接工厂
            ConnectionFactory factory = new ConnectionFactory()
            {
                HostName = "127.0.0.1",
                UserName = "guest",
                Password = "guest"
            };
            //2.创建连接
            var connection = factory.CreateConnection();
            //3.创建管道
            var channel = connection.CreateModel();
            //4.声明队列
            channel.QueueDeclare("simple", false, false, false, null);

            string msg = "这是一条消息";
            var sendByte = Encoding.UTF8.GetBytes(msg);
            //5.发布消息
            channel.BasicPublish("", "simple", null, sendByte);

            channel.Close();
            connection.Close();
        }
View Code

 

 

 

  SimpleClient:

    1. 初始化工厂
    2. 创建连接
    3. 创建通道
    4. 创建消费者
    5. 开始消费消息
    6. 接收消息做一些事情...
static void Main(string[] args)
        {
            //初始化工厂
            ConnectionFactory factory = new ConnectionFactory()
            {
                HostName = "127.0.0.1",
                UserName = "guest",
                Password = "guest"
            };
            //创建连接
            using (IConnection connection = factory.CreateConnection())
            {
                using (IModel channel = connection.CreateModel())
                {
                    //声明队列
                    channel.QueueDeclare("simple", false, false, false, null);
                    //创建消费者对象
                    var consumer = new EventingBasicConsumer(channel);

                    consumer.Received += (model, e) =>
                    {
                        byte[] message = e.Body.ToArray();
                        Console.WriteLine("接收消息:" + Encoding.UTF8.GetString(message));
                        //返回消息确认
                        channel.BasicAck(e.DeliveryTag, false);
                    };
                    //消费者开启监听
                    channel.BasicConsume("simple", false, consumer);
                    Console.ReadLine();
                }
            }
        }
View Code

 

 

效果:

  我们先改下生产者发布消息的代码,发布10条消息

  

for (int i = 0; i < 10; i++)
{
    string msg = $"第{i+1}条消息";
    //5.发布消息
    channel.BasicPublish("", "simple", null, Encoding.UTF8.GetBytes(msg));
    Console.WriteLine($"已发送消息:{msg}");
}

 

  现在我们打开本地RabbitMQ管理后台 http://localhost:15672/

  启动SimpleServer程序发布消息后出现十条记录:

  

  

  开始消费消息:

  

  消费后simple队列里的消息从10条变成了0条。

   本篇到这就完结了,下一篇工作队列模式

 

附上Demo地址:https://github.com/1164887865/RabbitMQDemo

 

posted @ 2020-04-18 13:06  贰拾~  阅读(871)  评论(0编辑  收藏  举报