我的RabbitMQ学习之1(介绍)

Posted missliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的RabbitMQ学习之1(介绍)相关的知识,希望对你有一定的参考价值。

官方网址:http://www.rabbitmq.com

 我翻译官网的文档,仅供自己学习用...................

RabbitMQ 是什么,它就是一个消息队列,用在哪里,用在不需要及时处理的地方,比如发送验证码,发送邮件等等,多用户订阅,最大化发挥系统性能,

RabbitMQ是一个消息代理:它接受和转发消息。你可以把它想象成一个邮局:当你把邮件放在邮箱里时,你可以确定邮差先生最终会把邮件发送给你的收件人。在这个比喻中,RabbitMQ是邮政信箱,邮局和邮递员。

RabbitMQ与邮局的主要区别是它不处理纸张,而是接受,存储和转发数据消息的二进制数据块

  • 技术分享图片

     

  • 队列是RabbitMQ内部的邮箱名称。尽管消息流经RabbitMQ和您的应用程序,但它们只能存储在队列中队列仅由主机的存储器&磁盘限制约束,它本质上是一个大的消息缓冲器。许多生产者可以发送消息到一个队列,许多消费者可以尝试从一个队列接收数据这就是我们代表队列的方式:

    技术分享图片

     

  • 消费与接受有类似的意义。一个消费者是一个程序,主要是等待接收信息:

    技术分享图片

     

请注意,生产者,消费者和经纪人不必驻留在同一主机上; 事实上在大多数应用程序中,他们没有

 

“P”是我们的生产者,“C”是我们的消费者。中间的盒子是一个队列 - 一个RabbitMQ代表消费者的消息缓冲区。

 

简单的 生产者 -> 消费者 模式 使用

1.消费者 

           //初始化一个连接 生产者 -> (发布者)
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            using (var channel = connection.CreateModel())
            {
                //定义一个队列
                channel.QueueDeclare(queue: "order",
                                     durable: true,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: null);

                var body = Encoding.UTF8.GetBytes(message);

                IBasicProperties properties = channel.CreateBasicProperties();

                //生产一条信息
                channel.BasicPublish(exchange: "",
                                     routingKey: "order",
                                     basicProperties: properties,
                                     body: body);
                Console.WriteLine("开始发送:--{0}", message);
            }

 

 

 2.简单的 消费者 模式

            //初始化一个连接 生产者 -> (消费者)
            var factory = new ConnectionFactory()
            { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            using (var channel = connection.CreateModel())
            {
                //对应的队列
                channel.QueueDeclare(queue: "order",
                                     durable: true,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: null);

                var consumer = new EventingBasicConsumer(channel);

                //接受消息
                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine("接受到信息: {0} mode:{1}", message, model);
                };
                channel.BasicConsume("order", true, consumer);
                Console.ReadLine();
            }

 

以上是关于我的RabbitMQ学习之1(介绍)的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ学习之集群部署

MQ学习之史上最全RabbitMQ(强烈建议收藏)

RabbitMQ学习之Work Queues

iOS学习之代码块(Block)

Django 学习之Celery(芹菜)

Flutter学习之混合开发