一、Rabbit MQ 简介

        RabbitMQ是一个接收、转发消息的消息中间件。你可以把它想象成一个邮局:当你把邮件放假邮箱后时,你能够确保邮递员最终会将你的邮件送到收件人手里。在这个比喻中,RabbitMQ是一个邮箱、一个邮局、一个邮递员。RabbitMQ与邮局最大的不同是它接收、存储和转发二进制数据块--消息,而不是处理纸质信件。

RabbitMQ与其他消息中间件通常使用的一些名词:

  • Producing:指发送,一个发送消息的程序叫做Producer

RabbitMQ在.NetCore中的基础应用

  • Queue:在RabbitMQ中,类似与邮局中的邮箱,用于存放二进制数据块。虽然消息经过RabbitMQ和你的应用程序,但是它们只能存在queue里面。queue本质上是一个大的消息缓冲区,只受主机的内存与硬盘的限制。多个Producer可以发送消息至一个queue,多个Consumer可以从一个queue中接收消息。如下图所示:

RabbitMQ在.NetCore中的基础应用

  • Consuming:至接收消息,一个等待接收消息的程序叫Consumer

RabbitMQ在.NetCore中的基础应用

Producer、COnsumer、Broker没有必要安装在同一台主机上;实际上,在大多应用程序中都是分开安装。一个应用程序可以同时是Producer和Consumer。

RabbitMQ使用了AMQP网络通信协议。可以点击深入了解RabbitMQ的工作原理。

二、Rabbit MQ 安装

安装RabbitMQ服务端(当前最新v 3.8.5下载地址 )注意:安装前先安装Erlang(建议opt 23.0)

RabbitMQ在.NetCore中的基础应用

RabbitMQ在.NetCore中的基础应用

RabbitMQ在.NetCore中的基础应用

如遇上图错误,是因为ERLANG_HOME路径配置有误,修改环境变量ERLANG_HOME=erlang安装目录中Bin的上一级:

RabbitMQ在.NetCore中的基础应用

这个时候运行服务端,如果提示RabbitMQ在.NetCore中的基础应用则百度安装一下即可。

注意:MSVCR120.dll要下载与系统对应的版本,不然会很难受。

RabbitMQ在.NetCore中的基础应用

三、RabbitMQ示例--"HELLO WORLD"

下面我们以发送、接收"Hello World"的示例,先简单了解RabbitMQ的开发(以C#代码为示例):

RabbitMQ在.NetCore中的基础应用

首先创建两个控制台应用程序:RabbitMQ.Producer(消息生产者)、RabbitMQ.Consumer(消息消费者)

RabbitMQ在.NetCore中的基础应用

添加nuget引用-->>RabbitMQ.Client

RabbitMQ.Producer.Program.cs

using RabbitMQ.Client;
using System;
using System.Text;
using System.Timers;

namespace RabbitMQ.Producer
{
    class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            using (var channel = connection.CreateModel())
            {
                channel.QueueDeclare(queue: "hello",
                                    durable: false,
                                    exclusive: false,
                                    autoDelete: false,
                                    arguments: null);

                string message = "Hello World!";
                var body = Encoding.UTF8.GetBytes(message);
                Timer timer = new Timer();
                timer.Elapsed += new ElapsedEventHandler((object sender, ElapsedEventArgs e) => {
                    channel.BasicPublish(exchange: "",
                                        routingKey: "hello",
                                        basicProperties: null,
                                        body: body);
                    Console.WriteLine($"[{DateTime.Now}][Producer Test] Sent {message}");
                });
                timer.Interval = 1000;
                timer.Enabled = true;
                timer.Start();

                Console.WriteLine(" Press [enter] to exit.");
                Console.ReadLine();
            }
        }
    }
}
View Code

相关文章:

  • 2021-11-25
  • 2021-08-25
  • 2021-10-14
  • 2021-12-16
  • 2019-11-13
  • 2018-05-10
  • 2021-09-01
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-06
  • 2021-07-02
  • 2021-11-20
  • 2018-12-11
相关资源
相似解决方案