栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

.NetCore利用BlockingCollection实现简易消息队列

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.NetCore利用BlockingCollection实现简易消息队列

消息队列现今的应用场景越来越大,常用的有RabbmitMQ和KafKa。
我们用BlockingCollection来实现简单的消息队列。

实现消息队列

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

HasEle,判断是否有元素

Add向队列中添加元素

Take从队列中取出元素

为了不把BlockingCollection直接暴漏给使用者,我们封装一个DemoQueueBlock

    /// 
    /// BlockingCollection演示消息队列
    /// 
    /// 
    public class DemoQueueBlock where T : class
    {
        private static BlockingCollection Colls;        public DemoQueueBlock()
        {

        }        public static bool IsComleted() {            if (Colls != null && Colls.IsCompleted) {                return true;
            }            return false;
        }        public static bool HasEle()
        {            if (Colls != null && Colls.Count>0)
            {                return true;
            }            return false;
        }       
        public static bool Add(T msg)
        {            if (Colls == null)
            {
                Colls = new BlockingCollection();
            }
            Colls.Add(msg);            return true;
        }        public static T Take()
        {            if (Colls == null)
            {
                Colls = new BlockingCollection();
            }            return Colls.Take();
        }
    }    /// 
    /// 消息体
    /// 
    public class DemoMessage
    {
        public string BusinessType { get; set; }        public string BusinessId { get; set; }        public string Body { get; set; }
    }
添加元素进队列

通过控制台,添加元素

           //添加元素            while (true)
            {
                Console.WriteLine("请输入队列");
                var read = Console.ReadLine();                if (read == "exit")
                {                    return;
                }

                DemoQueueBlock.Add(new DemoMessage() { BusinessId = read });
            }
消费队列

通过判断IsComleted,来确定是否获取队列

  Task.Factory.StartNew(() =>
            {                //从队列中取元素。
                while (!DemoQueueBlock.IsComleted())
                {                    try
                    {                        var m = DemoQueueBlock.Take();
                      Console.WriteLine("已消费:" + m.BusinessId);
                    }                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            });
查看运行结果

运行结果



作者:范存威
链接:https://www.jianshu.com/p/5c0cd3424574


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/222033.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号