短视频,自媒体,达人种草一站服务
这篇文章主要介绍了c# rabbitmq 简单收发消息的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
发布消息:(生产者)
/// <summary>
    /// 发送消息
    /// </summary>
    /// <param>队列名</param>
    /// <param>消息内容</param>
    private static void PublishInfo(string queue, string message)
    {
      try
      {
        var factory = new ConnectionFactory();
        factory.HostName = "localhost";//RabbitMQ服务在本地运行
        factory.UserName = "guest";//用户名
        factory.Password = "guest";//密码
using (var connection = factory.CreateConnection())
        {
          using (var channel = connection.CreateModel())
          {
            bool durable = true;//将消息标记为持久性
            channel.QueueDeclare(queue, durable, false, false, null);
IBasicProperties properties = channel.CreateBasicProperties();
            properties.DeliveryMode = 2;
var body = Encoding.UTF8.GetBytes(message);
            channel.BasicPublish("", queue, properties, body); //开始传递
}
        }
      }
      catch (System.Exception ex)
      {
        Console.WriteLine(ex.ToString());
      }
      Console.ReadLine();
    }
使用:
PublishInfo("test", "222222222222");
方法一:旧版可用
private static void ConsumeInfo(string queue)
 {
 try
 {
 var factory = new ConnectionFactory();
 factory.HostName = "localhost";//RabbitMQ服务在本地运行
 factory.UserName = "guest";//用户名
 factory.Password = "guest";//密码
using (var connection = factory.CreateConnection())
 {
 using (var channel = connection.CreateModel())
 {
 //bool durable = true;//将消息标记为持久性
 //channel.QueueDeclare("sljcgx:finish-queue", durable, false, false, null);//声明队列,队列不存在则创建该队列
//设置prefetchCount : 1来告知RabbitMQ,在未收到消费端的消息确认时,不再分发消息,也就确保了当消费端处于忙碌状态时,不再分配任务。
 channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
 var consumer = new QueueingBasicConsumer(channel);
 //false为手动确认,获取消息后需要添加 channel.BasicAck(ea.DeliveryTag, false)确认
 //true则为自动确认,不需要这行代码
 channel.BasicConsume(queue, false, consumer);
while (true)
 {
 try
 {
 var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//阻塞函数,获取队列中的消息
 var bodyReceive = ea.Body;
 string message = Encoding.UTF8.GetString(bodyReceive);
 Console.WriteLine(message);
 channel.BasicAck(ea.DeliveryTag, false);// 消息确认信号,确认后该消息将从队列里移除
 }
 catch (System.Exception ex)
 {
 Console.WriteLine(ex.Message);
 }
 }
 }
}
 }
 catch (System.Exception ex)
 {
 Console.WriteLine(ex.ToString());
 }
 Console.ReadLine();
 }
方法二:(通用)
private static void ConsumeInfo(string queue)
 {
 try
 {
 var factory = new ConnectionFactory();
 factory.HostName = "localhost";//RabbitMQ服务在本地运行
 factory.UserName = "guest";//用户名
 factory.Password = "guest";//密码
using (var connection = factory.CreateConnection())
 {
 using (var channel = connection.CreateModel())
 {
 //bool durable = true;//将消息标记为持久性
 //channel.QueueDeclare("sljcgx:finish-queue", durable, false, false, null);//声明队列,队列不存在则创建该队列
//设置prefetchCount : 1来告知RabbitMQ,在未收到消费端的消息确认时,不再分发消息,也就确保了当消费端处于忙碌状态时,不再分配任务。
 channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
 var consumer = new QueueingBasicConsumer(channel);
 //false为手动确认,获取消息后需要添加 channel.BasicAck(ea.DeliveryTag, false)确认
 //true则为自动确认,不需要这行代码
 channel.BasicConsume(queue, false, consumer);
while (true)
 {
 try
 {
 var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//阻塞函数,获取队列中的消息
 var bodyReceive = ea.Body;
 string message = Encoding.UTF8.GetString(bodyReceive);
 Console.WriteLine(message);
 channel.BasicAck(ea.DeliveryTag, false);// 消息确认信号,确认后该消息将从队列里移除
 }
 catch (System.Exception ex)
 {
 Console.WriteLine(ex.Message);
 }
 }
 }
}
 }
 catch (System.Exception ex)
 {
 Console.WriteLine(ex.ToString());
 }
 Console.ReadLine();
 }
到此这篇关于c# rabbitmq 简单收发消息的示例代码的文章就介绍到这了,更多相关c# rabbitmq 收发消息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!