RabbitMQ  是一种消息队列技术,当然还有很多其他的消息队列技术,例如 Kafka、ZeroMQ  。。。等等,各有优劣,并未做过多的了解。

也相似于一个数据库,将数据信息缓存起来处理,避开对大数据的处理,减轻数据库处理数据的压力。可用于实时性不高的异步请求或者需要执行的任务极度耗时等情况。

由消费者订阅队列,例如这个队列是一个通道,然后生产者在一方将队列消息压入队列中,然后消费者便可在另一方读取最早压入的数据,这是一种先进先出的数据结构。

  废话不多说,还是先安装用用吧。

  首先,需要给 RabbitMQ 安装运行环境 Erlang OTP ,(window环境下)我用的是  otp_win64_20.2.exe。

安装过程:下一步,下一步,然后安装完成--------基本操作。

  其次再安装 RabbitMQ,(window环境下)我用的是  rabbitmq-server-3.7.3.exe。

安装过程:下一步,下一步,然后安装完成--------基本操作。

  然而并没有结束,真正的操作才刚开始。

1---将window下的.erlang.cookie粘贴到当前登录用户下(亲测 window 7)。

    找到这里,复制几下

    

    粘贴到当前登录用户这里来,并覆盖当前的.erlang.cookie

  2---以管理员的方式打开cmd,并切换到之前安装的RabbitMQ的路径下回车。

  

    再输入rabbitmqctl status 查看是否安装成功可以正常运行,正常运行的状态是不会显示Error字段。

3---安装 RabbitMQ Web 的管理插件,输入rabbitmq-plugins enable rabbitmq_management 回车。

  

  此时就可以通过 http://127.0.0.1:15672/ 地址来访问本地web管理界面,会有一个默认的管理员账户,其账号和密码都是 guest 然而并不能用。

  

  4---查看本地账户列表的信息,输入 rabbitmqctl.bat list_users 回车。

   我已经新增过一个user_admin的超级用户了。

       

  5---新增账户,语法是 rabbitmqctl  add_user  用户名  用户密码 ,新增一个用户  账号 wnName  密码 wnPwd

    然后输入 rabbitmqctl.bat list_users 回车,便可看到新增的普通用户。

  

    

  6--授于用户管理员权限,语法是 rabbitmqctl set_user_tags 用户名 administrator,将 wnName  授予管理员权限。

    然后输入 rabbitmqctl.bat list_users 回车,便可看到 wnName 用户已经变成了管理员。

  

    rabbitmq 的语法有很多,普及下基础的吧 。

       启动服务 rabbitmq-server start

       停止服务    rabbitmq-server stop

       查看状态   rabbitmqctl   status

     查看用户   rabbitmqctl.bat list_users   rabbitmqctl list_users

     新增用户 rabbitmqctl   add_user            用户名      用户密码

     删除用户 rabbitmqctl   delete_user        用户名   

     修改密码 rabbitmqctl   change_user      用户名      新密码

     授予权限 rabbitmqctl   set_user_tags    用户名      权限

       权限    administrator(超级管理员)  monitoring(监控者) management(普通管理员)  policymaker(策略制定者)

     查看队列    rabbitmqctl    list_queues

     启动应用    rabbitmqctl    stop_app

       关闭应用    rabbitmqctl     stop_app

       清除队列    rabbitmqctl     reset

  7--- 插入一个小提示,由于是新增的用户,并没有分配虚拟主机权限,然后在代码里面登录的时候就会有问题---None of the specified endpoints were reachable。

     操作遗漏 登录之后点击 菜单栏 Admin

   

    

    解决方法:点击 wnName 进入页面再点击 Set permission (设置 权限) 就脱坑了。

       

  8---撸代码,顺便也写了个多线程的生产者衬托多线程的高效。

   队列需要两个对象来完成,以下2个 Demo 是 C# 控制台的代码。

  下面是生产者,生成一条信息需要1秒钟。将20条队列消息压入 队列名为 test-User 中,然后20条数据就是 20493 毫秒左右。写入了5个线程并执行同个任务,最后所花 4235 毫秒左右。

 //生产者
class Program{//实体类public class tblUser{public string Name { get; set; }public int Age { get; set; }public int Sex { get; set; }public string CreateTime { get; set; }public int Disable { get; set; }}public static int Interval = 0;public static int num = 1;private static Thread t1;private static Thread t2;private static Thread t3;private static Thread t4;private static Thread t5;public static ConnectionFactory factory = new ConnectionFactory(){//其他的属性不想写,简洁点 不然可能报错  偷一波懒VirtualHost = "/",//虚拟主机//rabbitmq 账户信息UserName = "wnName",Password = "wnPwd",};static void Main(string[] args){try{//Task t1 = Task.Factory.StartNew(() =>//{//    RunModule();//});///*创建任务 t2  t2 执行 数据集合添加操作*///Task t2 = Task.Factory.StartNew(() =>//{//    RunModule();//});t1 = new Thread(new ThreadStart(RunModule));//无参数的委托t2 = new Thread(new ThreadStart(RunModule));//无参数的委托t3 = new Thread(new ThreadStart(RunModule));//无参数的委托t4 = new Thread(new ThreadStart(RunModule));//无参数的委托t5 = new Thread(new ThreadStart(RunModule));//无参数的委托t1.Start();t2.Start();t3.Start();t4.Start();t5.Start();}catch (Exception ex){throw;}Console.ReadKey();}//队列名public static string mqName = "test-User";public static object obj = new object();static void RunModule(){//压入20条数据 可用 rabbitmqctl list_users 查看while (num <= 20){//锁 防止并发lock (obj){using (var connection = factory.CreateConnection()){using (var channel = connection.CreateModel()){//QueueDeclare方法中的参数  queue 队列   passive被动   durable持久  exclusive专属  autoDelete自动删除  nowait现在channel.QueueDeclare(mqName, false, false, false, null);//实例化实体类赋值然后转成json格式压入队列中。为什么要转成json格式?这个格式随意,队列中保存的都是字符串。var jsonData = JsonConvert.SerializeObject(                    new tblUser() { Name = "数据" + num, Age = 0, Sex = 0,                     CreateTime = DateTime.Now.ToString("yyyy-MM-dd"), Disable = 1 }); //序列化var properties = channel.CreateBasicProperties();properties.DeliveryMode = 2;//编码下var body = Encoding.UTF8.GetBytes(jsonData);channel.BasicPublish("", mqName, properties, body);}}Console.WriteLine("Starting...测试线程,第" + num+"次执行。");num++;}System.Threading.Thread.Sleep(1000);}//终止线程t1.Abort();t2.Abort();t3.Abort();t4.Abort();t5.Abort();t6.Abort();}}

    

  下面是消费者,从 test-User 队列中读取信息,消费者每次处理数据需要一秒钟。数据依次从最早压入的队列中取出,牺牲实时处理,避免了高峰大数据造成的拥挤。

    class Program{private static Thread get1;//线程一private static int  Interval = 0;private static Thread times;//计时器public  static string mqName = "test-User";public  static ConnectionFactory factory = new ConnectionFactory(){VirtualHost = "/",UserName = "wnName",Password = "wnPwd",};static void Main(string[] args){using (var connection = factory.CreateConnection()){using (var channel = connection.CreateModel()){channel.QueueDeclare(mqName, false, false, false, null);var consumer = new QueueingBasicConsumer(channel);channel.BasicConsume(mqName, true, consumer);while (true){var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();var body = ea.Body;var message = Encoding.UTF8.GetString(body);Console.WriteLine("获得数据 {0}", message);Thread.Sleep(1000);}}}}}

  

 

 

以上都是个人陋闻,如有问题有劳指正,大家共同学习共同进步。如果有帮助到您,希望您能给动个小手点一下右下方的推荐,谢谢。

   

转载于:https://www.cnblogs.com/yuqiuyeyun/p/8489391.html

小蜗牛入门---RabbitMQ 新手练习,自带C#控制台简易测试代码。相关推荐

  1. RabbitMQ工作模式Publish/Subscribe发布订阅,test测试代码

    RabbitMQ有以下几种工作模式 : 1.Work queues  工作队列 2.Publish/Subscribe 发布订阅 3.Routing      路由 4.Topics        通 ...

  2. 《Python编程:从入门到实践》学习笔记——第11章 测试代码

    文章目录 前言 1 测试函数 1.1 单元测试和测试用例 1.2 可通过的测试 1.3 不能通过的测试 1.4 测试未通过时怎么办 1.5 添加新测试 2 测试类 2.1 各种断言方法 2.2 一个要 ...

  3. 手把手带你入门和实践特征工程的万字笔记(附代码下载)

    ? 说起特征工程,都说是机器学习建模中最为重要而且费时的一项工作,而且它涉及的知识点会非常地多,经验老道的老司机自然是轻车熟路了,但对于刚刚入门的新手司机,学习到的知识点都是东一点西一点的,不够系统化 ...

  4. FFmpeg视频处理入门教程(新手必看)

    本文主要介绍了FFmpeg视频处理入门教程,它功能强大,用途广泛,是许多音频和视频格式的标准编码/解码实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 FFmpeg 是视频处理最常用的开源软件. ...

  5. DotA新手入门系列 新手生存篇

    DotA新手入门系列 新手生存篇 Dota是一局对抗游戏,玩者的目的虽然是击毁敌方的主建筑,但推进的过程必须通过人与人的对抗来实现.说白了,也就是对敌方的杀戮. 新手,就好象是没有上过战场的新兵.你拥 ...

  6. the crew 服务器维护,飙酷车神 the crew入门指南 新手必看

    就如同我们所知道的那样,EA 极品飞车的跳票,让<飙酷车神the crew>成为了今年竞速游戏的重头戏,而飙酷车神本身又融合了无缝式衔接的沙盒玩法,与我们所熟知的一般赛车游戏略有不同.接下 ...

  7. 游戏开发的HelloWorld,快速入门,新手上路,使用CocosCreator+JS,flyBird(飞翔小鸟)

    游戏开发的HelloWorld,快速入门,新手上路,使用CocosCreator+JS,flyBird(飞翔小鸟) 介绍 开发环境 游戏原理 文件结构 详细操作 全部代码 介绍 拓展什么的都没有,真正 ...

  8. 刚体验完RabbitMQ?一文带你SpringBoot+RabbitMQ方式收发消息

    楔子 本篇是消息队列RabbitMQ的第二弹. 上一篇的结尾我也预告了本篇的内容:利用RabbitTemplate和注解进行收发消息,还有一个我临时加上的内容:消息的序列化转换. 本篇会和Spring ...

  9. HTML5+CSS期末大作业:运动体育网站设计主题——体育铅球(5页)带注册 期末作业HTML代码

    学生网页课程设计期末作业下载 web网页设计制作成品- 详情介绍 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. ...

最新文章

  1. 前端和后端哪个工资高_嵌入式软硬件工程师哪个更有前途,工资还高
  2. log4j.appender.stdout.layout.ConversionPattern
  3. java.util.Locale简介
  4. Vs2012调试本地windows服务
  5. ORA-01092解决一例
  6. python nonlocal的用法_python global和nonlocal用法解析
  7. java web 锁_Java中锁的分类
  8. ++与*优先级相同,按照从右至左的顺序计算
  9. 爱不意味这“sorry”
  10. Java 技术书籍大全
  11. 扒美女衣服——妄撮游戏实现原理
  12. 电源管理方案APM和ACPI比较
  13. 计算机u盘装系统,教你u盘装系统教程
  14. 南京商标注册流程是什么
  15. VM8无intnet访问权限
  16. 互联网加速职场变革 大数据催生业界十大热门职业
  17. 基于python中jieba包的中文分词中详细使用(一)
  18. 12-16 云计算平台基础架构
  19. python好学吗一般要学多久-python好学吗
  20. 布隆过滤器(Bloom Filter)

热门文章

  1. 注塑模具行业主要存在哪些问题?
  2. 解决IIS打不开asp文件的问题
  3. 已解决 文件右键转圈圈,电脑卡死
  4. Kali2021 忘记登录密码重置
  5. 集合 —— 集合与集合运算
  6. 获取视频位置信息的方法
  7. 算法的概念以及算法分析
  8. JS实现移动端图片延迟加载
  9. 计算物理学(数值分析)上机实验答案4、数值积分和数值微分
  10. linux下的ctrl快捷键使用