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应用的小实例的更多相关文章

  1. winform 异步读取数据 小实例

    这几天对突然对委托事件,异步编程产生了兴趣,大量阅读前辈们的代码后自己总结了一下. 主要是实现 DataTable的导入导出,当然可以模拟从数据库读取大量数据,这可能需要一定的时间,然后 再把数据导入 ...

  2. CSS应用内容补充及小实例

    一.clear 清除浮动 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  3. Objective-C之代理设计模式小实例

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  4. Objective-C之@类别小实例

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  5. OC小实例关于init方法不小心的错误

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  6. canva实践小实例 —— 马赛克效果

    前面给大家带来了操作像素的API,此时此刻,我觉得应该配以小实例来进行进一步的说明和演示,以便给大家带来更宽广的视野和灵感,你们看了我的那么多的文章,应该是懂我的风格,废话不多说,进入正题: 这次给大 ...

  7. canvas实践小实例二 —— 扇形

    俗话说:发图不留种,菊花万人捅!我这里想延伸一下:教学不给例,说你是傻逼!哎呀,还挺押韵,嘻嘻,开个玩笑! 我们都讲了四期API的知识了,估计大家看的也是枯燥的很啊,前面的小实例也是太简单,简直不解渴 ...

  8. canvas实践小实例一 —— 画板工具

    前面讲了一部分的canvasAPI的基础知识,光看API的介绍确实是很无趣乏味,需要一点可以激发内心的激情的东西来激励自己来学习,于是就了伴随canvasAPI学习的小实例,这样通过API的知识,结合 ...

  9. HTML5自学笔记[ 13 ]canvas绘图小实例之方块移动

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

随机推荐

  1. kafka外部访问设置

    一.broker参数 broker.id:kafka集群的唯一标识. log.dirs:kafka存储消息日志的目录,多个用逗号隔开,需要保证指定的目录有充足的磁盘空间. zookeeper.conn ...

  2. Spring不能直接@autowired注入Static变量/ 关于SpringBoot的@Autowired 静态变量注入

    昨天在编写JavaMail工具类的时候,静态方法调用静态变量,这是很正常的操作,当时也没多想,直接静态注入. @Component public class JavaMailUtil { @Autow ...

  3. Linux内核链表复用实现栈

    我们当然可以根据栈的特性,向实现链表一样实现栈.但是,如果能够复用已经经过实践证明的可靠数据结构来实现栈,不是可以更加高效吗? so,今天我们就复用Linux内核链表,实现栈这样的数据结构. 要实现的 ...

  4. lamda表达式求最小值

    //取最小设置金额的列 var minList = LsList.OrderBy(n=>n.Price).First(); //取最小设置金额的值 var minValue = LsList.S ...

  5. asp.net core mvc 里的application中的start,end等事件

    我们以前在用asp.net mvc或者webform的时候,经常用用到Application里的事件 start,end等.我们在.net core 里也同样有类似的方法. 在Startup类里,Co ...

  6. Ajax方式导出Excel,浏览器显示下载Excel表

    以前实现导出Excel,都是用form表单提交,因为jquery封装的ajax请求导出Excel,浏览器不显示文件. 但是这次的需求要带着header,form表单不能带header,百度了下,原生a ...

  7. 〓经典文字MUD武侠游戏 我的江湖 〓

    〓经典文字MUD武侠游戏 我的江湖 〓 我的江湖(FFLIB)基于地狱内核扩展,目前已扩展了很多实用功能! 我的江湖玩法 和掌心西游.书剑.东方故事.侠缘.武林等玩法大同小异 但扩展了更多好玩的玩法, ...

  8. DevExpress XtraReport - 动态加载报表布局模板

    XtraReport的报表模板文件是.repx,下面的代码演示动态加载报表布局模板. XtraReport mReport = new XtraReport(); mReport.LoadLayout ...

  9. This is this

    首先,我们来了解一下 this 的几种绑定方式: this的默认绑定: 当一个函数没有明确的调用对象的时候,即作为独立函数调用时,this绑定到全局window对象. function func() ...

  10. 搭建基于docker 的redis分布式集群在docker for windows

    https://blog.csdn.net/xielinrui123/article/details/85104446 首先在docker中下载使用 docker pull redis:3.0.7do ...