c# rabbitmq 简单收发消息的示例代码
 更新时间:2020年08月19日 09:49:30   作者:潘达小新  

这篇文章主要介绍了c# rabbitmq 简单收发消息的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

发布消息:(生产者)

/// <summary>
/// 发送消息
/// </summary>
/// <param name=”queue”>队列名</param>
/// <param name=”message”>消息内容</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”);

 点击test进入队列内部:

消费消息:
方法一:旧版可用

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 ConsumeInfo2(string queue)
{
try
{
var factory = new ConnectionFactory();
factory.HostName = “localhost”;//RabbitMQ服务在本地运行
factory.UserName = “guest”;//用户名
factory.Password = “guest”;//密码
var connection = factory.CreateConnection();
var channel = connection.CreateModel();
channel.QueueDeclare(queue, true, false, false, null);//声明队列,队列不存在则创建该队列
channel.BasicQos(0, 1, false);//公平分发、同一时间只处理一个消息。

var consumer = new EventingBasicConsumer(channel); //消费者(指定消息通道)该事件在接收到消息时触发
consumer.Received += (sender, e) =>
{
byte[] body = e.Body.ToArray(); //消息字节数组
string message = Encoding.UTF8.GetString(body); //消息内容

Console.WriteLine(message);
channel.BasicAck(e.DeliveryTag, false); //手工确认

};
channel.BasicConsume(queue, false, consumer); //消费消息(在当前通道中监听 queue 队列,并进行消费)
Console.ReadLine();
connection.Close();
channel.Close();
}
catch (System.Exception ex)
{
Console.WriteLine(ex.ToString());
}
}

到此这篇关于c# rabbitmq 简单收发消息的示例代码的文章就介绍到这了,更多相关c# rabbitmq 收发消息内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:C#利用RabbitMQ实现点对点消息传输C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用)C#调用RabbitMQ实现消息队列的示例代码C#操作RabbitMQ的完整实例C#实现rabbitmq 延迟队列功能实例代码C#用RabbitMQ实现消息订阅与发布

c#
rabbitmq
收发消息

相关文章
使用DataGrid中扩展ItemRenderer和HeaderRenderer进行操作这两天在用Flex DataGrid做点东西,走了不少弯路,现将心得分享一下。

2009-02-02
.net 4.5部署到docker容器的完整步骤这篇文章主要给大家介绍了关于.net 4.5部署到docker容器的完整步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用.net4.5具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 2019-04-04
自写一个模仿Dictionary与Foreach的实现及心得总结利用闲暇时间自己写一个类模仿Dictionary实现,如果一个类进行foreach的话,该类必须实现IEnumerable,集合要支持foreach方式的遍历,必须实现IEnumerable接口,感兴趣的你可不要错过了哈 2013-02-02
ASP.NET MVC 2右键菜单和简单分页实例讲解在这里我们将讨论的是通过一个插件实现ASP.NET MVC 2中的右键菜单和一个相当简单的分页,希望对大家有所帮助。 2015-09-09
适用与firefox ASP.NET无刷新二级联动下拉列表适用与firefox ASP.NET无刷新二级联动下拉列表… 2007-08-08
asp.net数据绑定DataBind使用方法asp.net数据绑定DataBind使用方法,大家参考使用吧 2013-12-12
ASP.NET Core DI手动获取注入对象的方法这篇文章主要给大家介绍了关于ASP.NET Core DI手动获取注入对象的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2018-11-11
ASP.NET Core使用HostingStartup增强启动操作方法详解这篇文章主要介绍了ASP.NET Core使用HostingStartup增强启动操作,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 2020-11-11
ASP.NET中Ajax怎么使用这篇文章主要介绍了ASP.NET中Ajax使用方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 2016-07-07
c# indexof 用法深入理解在开发过程中经常会使用到c# indexof 查找字串中指定字符或字串首次出现的位置,返首索引值,本文将详细介绍,需要的朋友可以参考下 2012-11-11

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。