手机版

磊科利用阻止集合实现简易消息队列

时间:2021-08-30 来源:互联网 编辑:宝哥软件园 浏览:

消息队列现今的应用场景越来越大,常用的有RabbmitMQ和卡夫卡。

我们用阻止集合来实现简单的消息队列。

阻止集合实现了生产者/消费者模式,是对IProducerConsumerCollectionT接口的实现。与其他同时发生的集合一样,每次增加或拿元素,都会导致对集合的锁。只有当确定需要在内存中创建一个生产者,消费者模式时,再考虑这个类。

微软官方中的示例用法:

使用(BlockingCollectionint BC=new BlockingCollectionint()){ Task .工厂。start NEw(()={ for(int I=0;公元前1000年.添加;线程。睡眠(50);} //需要这样做才能防止下面的为每一个挂起公元前300年.完成添加();});//现在用为每一个消耗阻塞集合。//使用公元前300年.GetConsumingEnumerable()而不仅仅是公元前,因为//前者将阻止等待完成,而后者将//简单地拍摄基础集合的当前状态的快照foreach(公元前中的定义变量项目getconsumeingnumerable()){ Console .WriteLine(项);} }实现消息队列

用Vs2017创建一个控制台应用程序。创建DemoQueueBlock类,封装一些常用判断。

哈塞尔,判断是否有元素增加向队列中添加元素拿从队列中取出元素为了不把阻止集合直接暴漏给使用者,我们封装一个DemoQueueBlock类

///摘要///阻止收集演示消息队列////summary///type param name=' T '/type param公共类DemoQueueBlockT其中T :类{私有静态阻塞集合T Collspublic DemoqueueBlock(){ } public static bool是cmdled(){ if(Cols!=null Colls .IsCompleted){ 0返回真}返回false}公共静态bool HasEle(){ if(Colls!=null Colls .count 0){ 0返回真}返回false}公共静态bool Add(T msg){ if(Colls==null){ Colls=new blockingCollectiont();} Colls .添加(味精);返回真;}公共静态t Take(){ if(Colls==null){ Colls=new blockingCollectiont();}返回Colls .take();} } ///摘要///消息体////摘要公共类演示消息{公共字符串业务类型{ get设置;}公共字符串BusinessId { get设置;}公共字符串Body { get设置;} }添加元素进队列

通过控制台,添加元素

//添加元素while (true) { Console .WriteLine(“”请输入队列');变量读取=控制台.ReadLine();if(read==' exit '){ return;} DemoQueueBlockDemoMessage .add(new DeMomessage(){ BuSINESS id=read });}消费队列

通过判断被简化了,来确定是否获取队列

任务工厂。StartNew(()={ //从队列中取元素while(!DemoQueueBlockDemoMessage .is cmdled()){ try { var m=DemoqueueblockDemomessage .take();控制台WriteLine(“”已消费: ' m . BuSINESS id);} catch(异常例如){控制台.WriteLine(例如。消息);} } });查看运行结果

运行结果

这样我们就实现了简易的消息队列。

示例源码:简易队列

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:磊科利用阻止集合实现简易消息队列是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。