菜单

队列工厂之RabbitMQ

2019年5月8日 - 金沙编程资讯
 1  /// <summary>
 2     /// 队列服务端测试用例
 3     /// </summary>
 4     class Program
 5     {
 6         static void Main(string[] args)
 7         {
 8             //Redis_Server();
 9 
10             RabbitMQ_Server();
11 
12             //MSMQ_Server();
13         }
14         private static void RabbitMQ_Server()
15         {
16             //实例化QMsmq对象
17             var mq = QueueReposity<QRabbitMQ>.Current;
18 
19             try
20             {
21                 Console.WriteLine("Server端创建:RabbitMQ实例");
22                 mq.Create();
23 
24                 var num = 0;
25                 do
26                 {
27                     Console.WriteLine("输入循环数量(数字,0表示结束):");
28                     var readStr = Console.ReadLine();
29                     num = string.IsNullOrWhiteSpace(readStr) ? 0 : Convert.ToInt32(readStr);
30 
31                     Console.WriteLine("插入数据:");
32                     for (int i = 0; i < num; i++)
33                     {
34                         var str = "我的编号是:" + i;
35                         mq.Write(str);
36                         Console.WriteLine(str);
37                     }
38                 } while (num > 0);
39             }
40             catch (Exception ex)
41             {
42             }
43             finally
44             {
45                 Console.WriteLine("释放。");
46                 mq.Dispose();
47             }
48             Console.ReadLine();
49         }
50     }

金沙国际 1

首先找到安装rabbitmq的目录并跻身rabbitmq_server-3.6.六找到sbin文件夹-》按住Shift+鼠标右键sbin文件夹-》在此地展开命令窗体-》参谋那个地址
enable rabbitmq_management -》录入到刚刚展开的cmd窗体中:

 

url:

 1  /// <summary>
 2     /// 队列客户端测试用例
 3     /// </summary>
 4     class Program
 5     {
 6         static void Main(string[] args)
 7         {
 8             //RedisMQ_Client();
 9 
10             RabbitMQ_Client();
11 
12             //MSMQ_Client();
13         }
14 
15         private static void RabbitMQ_Client()
16         {
17             //实例化QMsmq对象
18             var mq = QueueReposity<QRabbitMQ>.Current;
19             try
20             {
21                 Console.WriteLine("Client端创建:RabbitMQ实例");
22                 mq.Create();
23 
24                 while (true)
25                 {
26                     try
27                     {
28                         var total = mq.Total();
29                         if (total > 0) { Console.WriteLine("队列条数:" + total); }
30 
31                         var result = mq.Read();
32                         if (result.Body == null) { continue; }
33                         Console.WriteLine(string.Format("接受队列{0}:{1}", result.Label, result.Body));
34                     }
35                     catch (Exception ex)
36                     { Console.WriteLine("异常信息:" + ex.Message); }
37                 }
38             }
39             catch (Exception ex)
40             {
41                 throw ex;
42             }
43             finally
44             {
45                 Console.WriteLine("释放。");
46                 mq.Dispose();
47             }
48         }
49     }

近来时尚版本地址:

 

 

那时八个必须的东西已经下载完毕,先安装erlang语言的exe,再安装rabbitmq-server-三.陆.陆.exe;有刚开始接触RabbitMQ的朋友会问为啥供给Erlang的支撑,因为他正是Erlang开垦出来的,Erlang语言是1种通用的面向并发的编制程序语言,特地用来编排布满式的壹种语言;当你安装后边说的尤其erlang安装包后,您Computer开首菜单中就有Erlang开荒编辑器,有时光你能够用来练练手,就方今来说这种语言单词一般出现在一级大集团的招贤纳士中,中型小型型一般未有,或然也因为很少中型小型型企业会提到到现身的缘故吗;到这里安装就达成了,下边须求经过命令行推行一些下令,由于RabbitMQ配置大多这里自个儿捡一定会用到的多少个来演示,其余实际能够参见官方文书档案:

因为Rabbit不光有队列,还有其余的路由,调换机等作用,所以能收看众多的总计或描述,这里大家只用到Queues的选项,点击进入Queues分界面能来看未有任何的数额,可是有3个Add
queue的开关,这一个调整台允许你手动增添贰个种类数据,当然那不是大家明日的话题:

 1 /// <summary>
 2     /// ==================
 3     /// author:神牛步行3
 4     /// des:该列工厂开源,包括队列有MSMQ,RedisMQ,RabbitMQ
 5     /// blogs:http://www.cnblogs.com/wangrudong003/
 6     /// ==================
 7     /// 队列工厂
 8     /// </summary>
 9     public class QueueReposity<T> where T : class,IQueue, new()
10     {
11         public static IQueue Current
12         {
13             get
14             {
15                 return PublicClass.ConfClass<T>.Current;
16             }
17         }
18     }

金沙国际 2

金沙国际 3

金沙国际 4

以此是翻开rabbitmq管理器的指令,这一年你能够在您浏览器中录入
通过旅客账号进入rabbitmq的监察后台:

常见自身都是进入那几个分界面包车型地铁Installation Guides节点后-》With installer
(recommended),今年进入的是windows系统所需的扶助文书档案吧,同样可以接纳版本下载;进入该分界面包车型地铁重点目标是须要下载一个Erlang
Windows的安装文件(更加深层原因:RabbitMq运营依赖于Erlang语言),点击Erlang
Windows Binary
File进入下载界面,然后选拔你操作系统对应的版本,假使您也是windows陆十几人的可以一贯用这些地址下载:

那儿恰恰加入队列中的数据就读抽出来了,今年我们再看Rabbitmq调控台,get
messages已经取得不出来具体的剧情音信了,因为这几个客户端消费了数据,队列中的数据自动清除了,至于是或不是想消除数据这么些设置在代码:

 1  /// <summary>
 2     /// RabbitMq
 3     /// </summary>
 4     public class QRabbitMQ : PublicClass.ConfClass<QRabbitMQ>, IQueue
 5     {
 6         private IConnection con = null;
 7 
 8         public void Create()
 9         {
10             if (string.IsNullOrWhiteSpace(this.ApiUrl) || string.IsNullOrWhiteSpace(this.ApiKey)) { throw new Exception("创建RabbitMq队列需要指定队列:HostName和Port"); }
11 
12             try
13             {
14                 var factory = new ConnectionFactory() { HostName = this.ApiUrl, Port = Convert.ToInt32(this.ApiKey) };
15                 con = con ?? factory.CreateConnection();
16             }
17             catch (Exception ex)
18             {
19                 throw new Exception(ex.Message);
20             }
21         }
22 
23         public long Total(string name = "Redis_01")
24         {
25             if (con == null) { throw new Exception("请先创建队列连接"); }
26             using (var channel = con.CreateModel())
27             {
28                 return channel.MessageCount(name);
29             }
30         }
31 
32         public Message Read(string name = "RabbitMQ_01")
33         {
34             if (con == null) { throw new Exception("请先创建队列连接"); }
35             if (string.IsNullOrWhiteSpace(name)) { throw new Exception("name不能为空"); }
36 
37             var message = new Message();
38             message.Label = name;
39             message.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
40             using (var channel = con.CreateModel())
41             {
42                 var baseResult = channel.BasicGet(name, true); //true:获取后删除队列   false:不删除  
43                 if (baseResult == null) { return message; }
44                 var body = baseResult.Body;
45                 message.Body = Encoding.UTF8.GetString(body); 
46             }
47             return message;
48         }
49 
50         public bool Write(string content, string name = "RabbitMQ_Queue01")
51         {
52             if (con == null) { throw new Exception("请先创建队列连接"); }
53             if (string.IsNullOrWhiteSpace(content) || string.IsNullOrWhiteSpace(name)) { throw new Exception("content和name不能为空"); }
54 
55             using (var channel = con.CreateModel())
56             {
57                 channel.QueueDeclare(name, false, false, false, null);
58                 var body = Encoding.UTF8.GetBytes(content);
59 
60                 channel.BasicPublish(string.Empty, name, null, body);
61                 return true;
62             }
63         }
64 
65         public void Dispose()
66         {
67             if (con != null)
68             {
69                 con.Close();
70                 con.Dispose();
71                 con = null;
72             }
73         }
74     }

本条时候就往RabbitMq队列中加入了11条数据,大家通过他的后台去找刚才增多的行列:

经过:创设(Create)-》读(Read)|写(Write)-》释放(Dispose)
的流程来选拔大家的行列工厂,以为挺轻巧的,此时大家运营下那一个Server端,然后录入参数:

金沙国际 5

经过地点配置情形和包装自个儿的章程,这里写了七个简便的测试用例,分为Server(参预音信队列)和Client(获取新闻队列),首先来看Server端的代码:

Password:guest

截图有一点长哦,不清楚dudu会不会怪作者哈哈,到那边能观察队列插入是旗开马到的,然后我们来经过client端消费队列,具体代码:

**» 队列工厂之RabbitMQ测试用例**

» RabbitMQ安装和调整台

Install-Package RabbitMQ.Client -Version 3.6.6

上边的guest已经够咋们测试使用了,至于剩余的如何管理员账号或密码等操作的装置能够去看这几个:

这一次和豪门享受的是RabbitMQ队列的用法,前1篇作品队列工厂之(MSMQ)中在讲述的时候曾经搭建了简要工厂,由此本章内容是在其上述增添的子项不再过多解说工厂的代码了;RabbitMQ应该是后天网络厂家音信队列用的最多的1种之1吧,看看招聘基本都会有其一单词的出现,她对待前1篇分享的MSMQ来讲配置更种种化,安装步骤数两者都大概吧,最大差距MSMQ是windows捆绑的劳动大致只可以在windows上行使,而Rabbit现最近运作支持的体系比较多;在写队列工厂第三篇作品的时候,其实代码已经都做到了当下队列工厂蕴含有如下队列(msmq,redis,rabbitmq),你能够去下载源码和测试用例:QueueReposity-队列工厂;希望大家能够欣赏,也意在各位多多”扫码援助“和”推荐“谢谢!

1 var baseResult = channel.BasicGet(name, true); //true:获取后删除队列   false:不删除  

以上对封装RabbitMQ的代码分享和条件搭建解说,希望能给您带来好的佑助,感激阅读;

金沙国际 6

金沙国际 7

再来咋们运转exe看下效果:

在C#中动用RabbitMQ官方网址列举了二种方式,这里作者选拔直接行使其提供的RabbitMQ.Client的nuget包,就当前以此nuget来讲肆.0.0及以上版本必要求NETFramework
4.5.一及以上版本或netcore版本才允许选择,作者这里用的是Framework四.伍框架所以引用了此版本的nuget包:

plugins操作文书档案:

要说RabbitMQ的设置,首先我们要下载对应服务器操作系统的RabbitMQ安装文件,因为她有对应差异操作系统的装置版本,那点需求留意;小编本地计算机系统是win七(属于windows)所以去官方网站下载安装包:
on rabbitmq.com下载,点击“windows”就可以下载:

**» 封装RabbitMQ队列的读和写**

此时借令你看来如下图的分界面,那恭喜您成功了,搭建RabbitMQ服务成功了:

» RabbitMQ安装和调控台

能够看到大家恰好插入的行列总量和称号,如若您想看中间具体内容,能够点击名字“mq_金沙国际,0一”进入某三个种类的分界面,往上边拉滚动条找到“Get
messages”选项,暗中认可查看Messages是一大家修改为十,再点击get
messages就可见看到如下图我们刚刚插入的具体内容了:

**» 队列工厂之RabbitMQ测试用例**

代码主要使用流程是:创造(Create)-》读(Read)|写(Write)-》释放(Dispose);有了现实的RabbitMq达成类,那么在工厂中一直通过泛型映射来获得该达成类的对象:

金沙国际 8

Username:guest

下边一步二个脚踏过的痕迹的来享受:

**» 封装RabbitMQ队列的读和写**

rabbitmqctl操作的文书档案:

 

引用过后正是往前边讲的连串工厂填写代码,首先承接统一安插文件读取类 PublicClass.ConfClass<QRabbitMQ> ,然后完成 IQueue 接口,这里封装了RabbitMq常用的多少个操作方法,具体代码:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图