.NET6 RabbitMQ

首先要安装好RabbitMQ,并启动起来。

1、消费者 代码

try
{
    WriteLineTitle($"---------【Receiver】,Start...---------");
    IConnectionFactory factory = new ConnectionFactory//创建连接工厂对象
    {
        HostName = AppsettingGet("RabbitMQ:HostName"),// "192.168.158.209",//IP地址
        Port = Convert.ToInt32(AppsettingGet("RabbitMQ:Port")),//5672,//端口号
        UserName = AppsettingGet("RabbitMQ:UserName"),//"admin",//用户账号
        Password = AppsettingGet("RabbitMQ:Password"),//"123456"//用户密码
    };
    IConnection conn = factory.CreateConnection();
    IModel channel = conn.CreateModel();
    string name = "JavaUserCenter";
    //声明一个队列
    channel.QueueDeclare(
      queue: name,//消息队列名称
      durable: true,//是否持久化,true持久化,队列会保存磁盘,服务器重启时可以保证不丢失相关信息。
      exclusive: false,//是否排他,true排他的,如果一个队列声明为排他队列,该队列仅对首次声明它的连接可见,并在连接断开时自动删除.
      autoDelete: false,//是否自动删除。true是自动删除。自动删除的前提是:致少有一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会自动删除.
      arguments: null ////设置队列的一些其它参数
     );
    //创建消费者对象
    var consumer = new EventingBasicConsumer(channel);
    consumer.Received += (model, ea) =>
    {
        byte[] msgArry = ea.Body.ToArray();//接收到的消息
        string msg = System.Text.Encoding.UTF8.GetString(msgArry);
        WriteLine_($"{msg}");
    };
    //消费者开启监听
    channel.BasicConsume(name, true, consumer);
    WriteLineTitle($"---------【Receiver】,Start success---------");
    Console.ReadKey();
    channel.Dispose();
    conn.Close();

    WriteLineTitle("---------【Receiver】,close---------");
}
catch (Exception ex)
{
    WriteLineError_($"---------【Receiver】,Exception msg:{ex.ToString()}");
}

 2、生产者 代码

WriteLineTitle($"---------【Sender】,Start success---------");

IConnectionFactory factory = new ConnectionFactory//创建连接工厂对象
{
    HostName = AppsettingGet("RabbitMQ:HostName"),// "192.168.158.209",//IP地址
    Port = Convert.ToInt32(AppsettingGet("RabbitMQ:Port")),//5672,//端口号
    UserName = AppsettingGet("RabbitMQ:UserName"),//"admin",//用户账号
    Password = AppsettingGet("RabbitMQ:Password"),//"123456"//用户密码
};
IConnection con = factory.CreateConnection();//创建连接对象
IModel channel = con.CreateModel();//创建连接会话对象
string name = "JavaUserCenter";
//声明一个队列
channel.QueueDeclare(
  queue: name,//消息队列名称
  durable: true,//是否持久化,true持久化,队列会保存磁盘,服务器重启时可以保证不丢失相关信息。
  exclusive: false,//是否排他,true排他的,如果一个队列声明为排他队列,该队列仅对首次声明它的连接可见,并在连接断开时自动删除.
  autoDelete: false,//是否自动删除。true是自动删除。自动删除的前提是:致少有一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会自动删除.
  arguments: null //设置队列的一些其它参数
);
string str = string.Empty;
do
{
    WriteLine_("请输入发送的内容,并且按回车发送:");
    str = Console.ReadLine();
    //消息内容
    byte[] body = System.Text.Encoding.UTF8.GetBytes(str);
    //发送消息
    channel.BasicPublish("", name, null, body);
    WriteLine_("消息发送成功!");
    Console.WriteLine("");
} while (str.Trim().ToLower() != "exit");
con.Close();
channel.Close();

以上代码是简单模式,RabbitMQ有很多模式,剩下的自己去试试吧。也可以参考下面这篇文章,不过有些问题大家自己注意下,

1、文档里面没做持久化,这个在使用的时候一定要做持久化。

2、 byte[] message = ea.Body;这个代码现在不可行,要写成:ea.Body.ToArray();

其它问题大家自己遇到在处理吧。

 

 

 

Reference:

https://www.cnblogs.com/zxtceq/p/14016564.html

posted @ 2022-01-29 17:25  PrintY  阅读(366)  评论(0编辑  收藏  举报