用C#实现Rabbitmq应用的小实例
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库
安装RabbitMQ必须要有Erlang的环境,没有装好环境的这里给出Erlang的官网可自行下载:https://www.erlang.org
一、配置RabbitMQ
1.将RabbitMQ的安装路径添加到环境变量中,启动RabbitMQ
2.启动WEB管理界面:rabbitmq-plugins enable rabbitmq_management
3.登录管理界面,RabbitMQ的管理界面的默认访问路径为:http://localhost:15672
4.可以使用guest用户登录,密码也是guest

二、C#实现的小案例,这里给出官方教程:https://www.rabbitmq.com/getstarted.html
1.发布者
static void Main(string[] args)
{
var factory = new ConnectionFactory();
factory.HostName = "localhost";
factory.UserName = "guest";
factory.Password = "guest"; using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{ bool durable = true;
//声明一个名称为:hello的持久化的队列
channel.QueueDeclare("hello", durable, false, false, null); string message = GetMessage(args);
var properties = channel.CreateBasicProperties();
properties.SetPersistent(true); //写入队列
for (int i = ; i < ; i++)
{
var body = Encoding.UTF8.GetBytes(message+i);
channel.BasicPublish("", "hello", properties, body);
Console.WriteLine(" Send {0}", message+i);
}
}
} Console.ReadKey();
}
private static string GetMessage(string[] args)
{
return ((args.Length > ) ? string.Join(" ", args) : "Hello HT");
}
2.消费者
static void Main(string[] args)
{
var factory = new ConnectionFactory();
factory.HostName = "localhost";
factory.UserName = "guest";
factory.Password = "guest"; using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
bool durable = true;
//在MQ上定义一个持久化队列,名称为:hello,如果名称相同不会重复创建
channel.QueueDeclare("hello", durable, false, false, null);
//输入1,那如果接收一个消息,如果没有应答,则客户端不会收到下一个消息
//监听队列
channel.BasicQos(, , false); var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("hello", false, consumer);
//获取消息
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); var body = ea.Body;
var message = Encoding.UTF8.GetString(body); int dots = message.Split('.').Length - ;
Thread.Sleep(dots * ); Console.WriteLine("Received {0}", message);
Console.WriteLine("Done");
//回复确认
channel.BasicAck(ea.DeliveryTag, false);
}
}
}
}
3、通过发布者的创建我们可以在管理界面中查看到添加的队列

用C#实现Rabbitmq应用的小实例的更多相关文章
- winform 异步读取数据 小实例
这几天对突然对委托事件,异步编程产生了兴趣,大量阅读前辈们的代码后自己总结了一下. 主要是实现 DataTable的导入导出,当然可以模拟从数据库读取大量数据,这可能需要一定的时间,然后 再把数据导入 ...
- CSS应用内容补充及小实例
一.clear 清除浮动 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- Objective-C之代理设计模式小实例
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Objective-C之@类别小实例
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- OC小实例关于init方法不小心的错误
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- canva实践小实例 —— 马赛克效果
前面给大家带来了操作像素的API,此时此刻,我觉得应该配以小实例来进行进一步的说明和演示,以便给大家带来更宽广的视野和灵感,你们看了我的那么多的文章,应该是懂我的风格,废话不多说,进入正题: 这次给大 ...
- canvas实践小实例二 —— 扇形
俗话说:发图不留种,菊花万人捅!我这里想延伸一下:教学不给例,说你是傻逼!哎呀,还挺押韵,嘻嘻,开个玩笑! 我们都讲了四期API的知识了,估计大家看的也是枯燥的很啊,前面的小实例也是太简单,简直不解渴 ...
- canvas实践小实例一 —— 画板工具
前面讲了一部分的canvasAPI的基础知识,光看API的介绍确实是很无趣乏味,需要一点可以激发内心的激情的东西来激励自己来学习,于是就了伴随canvasAPI学习的小实例,这样通过API的知识,结合 ...
- HTML5自学笔记[ 13 ]canvas绘图小实例之方块移动
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
随机推荐
- select readonly 不能看到其他选项解决方案
在html中是select readonly后,依然可以下拉选择,不想做disabled增加隐藏域,下面提供两种解决方案 解决方案1: [javascript] view plain copy ...
- 【技术博客】MySQL和Django常用操作
MySQL和Django是搭建网站常用的配置之一,在此记录一下在Windows系统搭建网站时MySQL以及Django常用的操作. MySQL MySQL的SQL语句不区分大小写,推荐将保留字大写,数 ...
- 第08组 Beta冲刺(2/4)
队名 八组评分了吗 组长博客链接(2分) 组员1李昕晖(组长) 过去两天完成了哪些任务 文字/口头描述 12月9号了解各个小组的进度与难以攻破的地方,晚上安排开会,安排新的冲刺任务. 重新分配小组及个 ...
- SAS PROC MEANS 输出每个变量的描述性统计量
ods listing close;ods output summary=class;proc means data=CC.Model_Params stackods n mean std min m ...
- 【转】Android 将自己的应用改为系统应用
所谓系统程序就是system/app目录中的程序,普通应用转换成系统程序后有稳定.减少内存(DATA)空间占用.恢复出厂设置后不会消失.修改系统时间.调用隐藏方法.系统关机重启.静默安装升级卸载应用等 ...
- yum 安装指定版本Docker
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_39553910/artic ...
- Octet和byte的差异(转)
在不严谨的前提下,byte和octet都表示为8 bits,但是严格意义上来讲,octet才是严格意义上的8 bits,而历史上的byte其实可以表示为4 bits ~ 10 bits,只不过现在的计 ...
- UPDATE REPLACE 替换"\\"
UPDATE Working_InterfaceToManager SET StudyPhotoInfoList = REPLACE(StudyPhotoInfoList,"\\\\&quo ...
- PV、TPS、QPS是怎么计算出来的?(转载的)
QPS = req/sec = 请求数/秒 [QPS计算PV和机器的方式] QPS统计方式 [一般使用 http_load 进行统计] QPS = 总请求数 / ( 进程总数 * 请求时间 ) QPS ...
- osgb文件过大,可以通过Compressor=zlib对纹理进行压缩
osg::ref_ptr<osgDB::ReaderWriter::Options> options = new osgDB::ReaderWriter::Options; options ...