.NET Core 下使用 RabbitMQ

介紹

RabbitMQ是一個開源的,基於AMQP(Advanced Message Queuing Protocol)協議的完整,可複用的企業級消息隊列(Message Queue 一種應用程序與應用程序之間的一種通信方法)系統,RabbitMQ可以實現點對點,發佈訂閱等消息處理模式

安裝

爲了開發方便,我在docker中安裝了RabbitMQ,RabbitMQ安裝完成後,默認端口打開地址爲:http://localhost:15672,輸入默認賬號密碼,guest/guest,可以看到RabbitMQ UI界面。

快速開始

接下來我們用RabbitMQ來完成一個比較常見的生產者和消費者模式的代碼,新建兩個控制檯項目,RabbitMQConsumerRabbitMQProducer

分別在兩個項目中安裝組件

Install-Package RabbitMQ.Client

RabbitMQProducer生產者項目中,添加以下代碼。

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

namespace RabbitMQProducer
{
    class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost",
                Port = 5672,
                UserName = "guest",
                Password = "guest"
            };

            using var connection = factory.CreateConnection();
            using var channel = connection.CreateModel();

            var exchange = "msg_test";

            channel.ExchangeDeclare(exchange, type: ExchangeType.Fanout);

            for (int i = 0; i < 10000; i++)
            {
                var message = $"hello,我是生產者【{i + 1}】號";
                var body = Encoding.UTF8.GetBytes(message);

                channel.BasicPublish(exchange, routingKey: "", basicProperties: null, body: body);

                Console.WriteLine($"- 發送消息:{message}");
            }
        }
    }
}

模擬發出10000次消息,接下來在RabbitMQConsumer消費者項目中接收消息,代碼如下:

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;

namespace RabbitMQConsumer
{
    class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory()
            {
                HostName = "localhost",
                Port = 5672,
                UserName = "guest",
                Password = "guest"
            };

            using var connection = factory.CreateConnection();
            using var channel = connection.CreateModel();

            var exchange = "msg_test";

            channel.ExchangeDeclare(exchange, type: ExchangeType.Fanout);

            var queueName = channel.QueueDeclare().QueueName;
            channel.QueueBind(queue: queueName, exchange, routingKey: "");

            Console.WriteLine("開始監聽消息...");
            while (true)
            {
                var consumer = new EventingBasicConsumer(channel);

                consumer.Received += (model, ea) =>
                {
                    byte[] body = ea.Body.ToArray();
                    var message = Encoding.UTF8.GetString(body);

                    Console.WriteLine($"- 接收到消息:{message}");
                };

                channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);
            }
        }
    }
}

同時啓動兩個看看效果。

一閃而過,速度還是挺快的,更多操作可以查看官方教程:https://www.rabbitmq.com/getstarted.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章