ASP.NET Core知识之RabbitMQ组件的使用



RabbitMQ是一种越来越流行的开源,快速消息代理,它使用Erlang编写并基于Open Telecom Platform框架构建。它实现了高级消息队列协议(AMQP),用于在进程,应用程序和服务器之间交换数据。它特别具有吸引力,
[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:a0894489-53b9-4d44-b76c-68eb978602f1

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:a3da29b9-b16d-446a-b577-26a11329e3ac

通过编写代码,通过管理用户界面或通过PowerShell在RabbitMQ中创建队列。

RabbitMQ条款
使用RabbitMQ时,应注意两个术语:

  • 甲队列是一种数据结构,FIFO的基础上(在第一出第一)上工作。在这种情况下,队列是可以容纳数据的大型消息缓冲区。
    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:e8f6a41c-d15e-4650-955e-264a8edcbdb1
    [En]

    [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:8581c597-3890-4692-832e-e05f0054d29b

安装与设定
设置RabbitMQ非常简单。在安装RabbitMQ之前,您应该安装Erlang。 根据您使用的操作系统下载正确版本的Erlang。接下来,下载并安装RabbitMQ服务器。

用C#编程RabbitMQ
已经在系统中安装了Erlang和RabbitMQ,则需要安装RabbitMQ .Net客户端以连接到RabbitMQ服务并与之一起使用。您可以通过NuGet软件包管理器安装RabbitMQ客户端。

在Visual Studio中创建一个新的控制台应用程序。接下来,使用RabbitMQ默认的交换机做演示。
通过NuGet软件包管理器安装RabbitMQ.Client软件包。假设RabbitMQ服务器在系统中本地运行,则以下代码段可用于创建与RabbitMQ服务器的连接。

ConnectionFactory connectionFactory = new ConnectionFactory();
IConnection connection = connectionFactory.CreateConnection();

现在,假设RabbitMQ服务正在远程系统中运行。这是一种使您返回到RabbitMQ服务的连接实例的方法。

public IConnection GetConnection(string hostName, string userName, string password)
        {
            ConnectionFactory connectionFactory = new ConnectionFactory();
            connectionFactory.HostName = hostName;
            connectionFactory.UserName = userName;
            connectionFactory.Password = password;
            return connectionFactory.CreateConnection();
        }

发送和接收消息
在系统本地运行RabbitMQ服务的情况下,请使用以下方法将消息发送到队列。请注意,已使用默认设置建立了与RabbitMQ服务的连接。

public static void Send(string queue, string data)
        {
            using (IConnection connection = new ConnectionFactory().CreateConnection())
            {
                using (IModel channel = connection.CreateModel())
                {
               channel.QueueDeclare(queue, false, false, false, null);
        channel.BasicPublish(string.Empty, queue, null, Encoding.UTF8.GetBytes(data));
                }
            }
        }

通道用于与服务器建立通信以发送和接收消息。使用此方法发送到队列的消息并不持久-我已将false第二个参数传递给该QueueDeclare方法。
[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:98eab80a-f8f4-4273-9216-fd105b9987c2

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:c9b97ef4-e9cf-417b-a8b3-5a85d69e596f

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:474cbd24-6e4c-42b9-bfc4-76e8e83e3e70

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:aeb4b57e-233e-4db9-844b-b67883abcd5c

public static void Receive(string queue)
        {
            using (IConnection connection = new ConnectionFactory().CreateConnection())
            {
                using (IModel channel = connection.CreateModel())
                {
               channel.QueueDeclare(queue, false, false, false, null);
               var consumer = new EventingBasicConsumer(channel);
               BasicGetResult result = channel.BasicGet(queue, true);
                    if (result != null)
                    {
                      string data =
                      Encoding.UTF8.GetString(result.Body);
                        Console.WriteLine(data);
                    }
                }
            }
        }

下一个代码段显示了如何调用Send以及Receive我们在本文中创建的方法:

static void Main(string[] args)
{
     Send("IDG","Hello World!");
     Receive("IDG");
     Console.ReadLine();
}

Copy实验结果

ASP.NET Core知识之RabbitMQ组件的使用

程序代码贴图

  • 发送端
    ASP.NET Core知识之RabbitMQ组件的使用

代码如下:

public class Program
{
  static ConnectionFactory factory = new ConnectionFactory();
  static void Main(string[] args)
  {
    // var factory = new ConnectionFactory();      //连接 RabbitMQ 工厂实例
    factory.HostName = "127.0.0.1";                //要连接到的主机,默认为 localhost
    factory.Port = 5672;                        //连接断开,默认为 -1(5672)
    factory.UserName = "admin";                 //RabbitMQ 连接用户名,默认为 guest
    factory.Password = "123456";                 //RabbitMQ 连接密码,默认为 guest

    //循环发送
    for (int i = 1; i < 11; i++)
    {
      Console.WriteLine(i);
      SendData(i);

    }
    Console.ReadLine();
  }

  public static ConnectionFactory ConFactory()
  {
    var Newfactory = new ConnectionFactory();
    Newfactory = factory;
    return Newfactory;
  }
  public static void SendData(int i)
  {
    var factory = Program.ConFactory();
    using (var connection = factory.CreateConnection())
    {
      //&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x901A;&#x9053;&#x3001;&#x4F1A;&#x8BDD;&#x548C;&#x6A21;&#x578B;
      using (var channel = connection.CreateModel())
      {
        channel.QueueDeclare("myQueue1", false, false, false, null);
        var properties = channel.CreateBasicProperties();
        properties.DeliveryMode = 1;

        string message = $"Hello_RabbitMQ,This is the sender. Sorting {i}";  //&#x6D88;&#x606F;&#x5185;&#x5BB9;
        byte[] body = Encoding.UTF8.GetBytes(message);
        channel.BasicPublish("", "myQueue1", properties, body);              //&#x53D1;&#x9001;&#xFF08;&#x751F;&#x4EA7;&#xFF09;&#x6D88;&#x606F;
        Console.WriteLine($"Send_Messages: {message}");
        //   channel.Close();
      }
      // connection.Close();
    }
  }
}
  • 接收端
    ASP.NET Core知识之RabbitMQ组件的使用

代码如下:

class Program
{
  static void Main(string[] args)
  {
    var factory = new ConnectionFactory();      //&#x8FDE;&#x63A5; RabbitMQ &#x5DE5;&#x5382;&#x5B9E;&#x4F8B;

    factory.HostName = "127.0.0.1";             //&#x8981;&#x8FDE;&#x63A5;&#x5230;&#x7684;&#x4E3B;&#x673A;&#xFF0C;&#x9ED8;&#x8BA4;&#x4E3A; localhost
    factory.Port = 5672;                        //&#x8FDE;&#x63A5;&#x65AD;&#x5F00;&#xFF0C;&#x9ED8;&#x8BA4;&#x4E3A; -1(5672)
    factory.UserName = "admin";                //RabbitMQ &#x8FDE;&#x63A5;&#x7528;&#x6237;&#x540D;&#xFF0C;&#x9ED8;&#x8BA4;&#x4E3A; guest
    factory.Password = "123456";               //RabbitMQ &#x8FDE;&#x63A5;&#x5BC6;&#x7801;&#xFF0C;&#x9ED8;&#x8BA4;&#x4E3A; guest

    //&#x4E0D;&#x80FD;&#x653E;&#x5165; using &#x8BED;&#x53E5;&#x4E2D;&#xFF0C;&#x5426;&#x5219;&#x5F53; using &#x8BED;&#x53E5;&#x7ED3;&#x675F;&#x540E;&#x4F1A; Close &#x8FDE;&#x63A5;&#xFF0C;EventingBasicConsumer.Received &#x4E8B;&#x4EF6;&#x5C06;&#x4E0D;&#x4F1A;&#x88AB;&#x89E6;&#x53D1;
    var connection = factory.CreateConnection();
    var channel = connection.CreateModel();
    channel.QueueDeclare("myQueue1", false, false, false, null);
    var consumer = new EventingBasicConsumer(channel);  //&#x6D88;&#x8D39;&#x8005;&#xFF08;&#x6307;&#x5B9A;&#x6D88;&#x606F;&#x901A;&#x9053;&#xFF09;
    channel.BasicConsume("myQueue1", true, consumer);   //&#x6D88;&#x8D39;&#x6D88;&#x606F;&#xFF08;&#x5728;&#x5F53;&#x524D;&#x901A;&#x9053;&#x4E2D;&#x76D1;&#x542C; myQueue1 &#x961F;&#x5217;&#xFF0C;&#x5E76;&#x8FDB;&#x884C;&#x6D88;&#x8D39;&#xFF09;

    //&#x8BE5;&#x4E8B;&#x4EF6;&#x5728;&#x63A5;&#x6536;&#x5230;&#x6D88;&#x606F;&#x65F6;&#x89E6;&#x53D1;

    consumer.Received += (sender, e) =>
    {
      byte[] body = e.Body.ToArray();   //&#x6D88;&#x606F;&#x5B57;&#x8282;&#x6570;&#x7EC4;
      string message = Encoding.UTF8.GetString(body); //&#x6D88;&#x606F;&#x5185;&#x5BB9;
      Console.WriteLine($"Receive_Messages: {message}");
    };
    Console.ReadLine();
    connection.Close();
    channel.Close();
  }
}

在RabbitMQ中的持久性
RabbitMQ为持久性提供了出色的支持。您可以有两种类型的队列:持久队列和非持久队列。持久队列使消息保留在磁盘上,而非持久队列仅保留在内存中。因此,服务器重新启动后,”持久”队列中的消息可用,而”非持久”队列中的消息丢失。

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:b4888004-df7a-47dd-9322-b68f0319aec9

[En]

[TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:service is stopped due to arrears, please recharge your account in Tencent Cloud requestId:7552cc19-dde8-4054-a218-208a165d800e

交换机模式请查看:ASP.NET Core知识之RabbitMQ组件使用(二)
附:
RabbitMQ 用户常用命令

  • 进 RabbitMQ 命令:
    CMD: CD C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.1\sbin
  • 创建 admin 用户并指定密码:
    rabbitmqctl add_user admin adminli
  • 设置 admin 用户读写所有队列的权限:
    rabbitmqctl set_permissions admin ".*" ".*" ".*"
  • 设置 admin 用户所属的用户组:
    rabbitmqctl set_user_tags admin administrator
  • 查看用户列表:
    rabbitmqctl list_users
  • 修改 admin 用户的密码为 admin123:
    rabbitmqctl change_password admin admin123
  • 删除 admin 用户:
    rabbitmqctl delete_user admin

Original: https://www.cnblogs.com/LaoPaoEr/p/14415493.html
Author: 无昵称老炮儿
Title: ASP.NET Core知识之RabbitMQ组件的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/562370/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球