.NetCore利用BlockingCollection实现简易消息队列
前言
消息队列现今的应用场景越来越大,常用的有RabbmitMQ和KafKa。
我们用BlockingCollection来实现简单的消息队列。
实现消息队列
用Vs2017创建一个控制台应用程序。创建DemoQueueBlock类,封装一些常用判断。
HasEle,判断是否有元素
Add向队列中添加元素
Take从队列中取出元素
为了不把BlockingCollection直接暴漏给使用者,我们封装一个DemoQueueBlock类
/// <summary>
/// BlockingCollection演示消息队列
/// </summary>
/// <typeparam name="T"></typeparam>
public class DemoQueueBlock<T> where T : class
{
private static BlockingCollection<T> 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<T>();
}
Colls.Add(msg);
return true;
}
public static T Take()
{
if (Colls == null)
{
Colls = new BlockingCollection<T>();
}
return Colls.Take();
}
}
/// <summary>
/// 消息体
/// </summary>
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<DemoMessage>.Add(new DemoMessage() { BusinessId = read });
}
消费队列
通过判断IsComleted,来确定是否获取队列
Task.Factory.StartNew(() =>
{
//从队列中取元素。
while (!DemoQueueBlock<DemoMessage>.IsComleted())
{
try
{
var m = DemoQueueBlock<DemoMessage>.Take();
Console.WriteLine("已消费:" + m.BusinessId);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
});
查看运行结果
运行结果
这样我们就实现了简易的消息队列。
示例源码
参考链接
BlockingCollection
Orleans源码分析
.NetCore利用BlockingCollection实现简易消息队列的更多相关文章
- php 利用activeMq+stomp实现消息队列
php 利用activeMq+stomp实现消息队列 一.activeMq概述 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J ...
- 八.利用springAMQP实现异步消息队列的日志管理
经过前段时间的学习和铺垫,已经对spring amqp有了大概的了解.俗话说学以致用,今天就利用springAMQP来完成一个日志管理模块.大概的需求是这样的:系统中有很多地方需要记录操作日志,比如登 ...
- (转)java redis使用之利用jedis实现redis消息队列
应用场景 最近在公司做项目,需要对聊天内容进行存储,考虑到数据库查询的IO连接数高.连接频繁的因素,决定利用缓存做. 从网上了解到redis可以对所有的内容进行二进制的存储,而java是可以对所有对象 ...
- Redis 简易消息队列
为了保持程序的高效,建议使用ProtoBuf. Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48, ...
- [资源]PHP使用消息队列
利用PHP操作Linux消息队列完成进程间通信 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS[原创] Redis队列——PHP操作简单示例 入队操作 <?php $redis = n ...
- Redis+php-resque实现消息队列
服务器硬件配置 Dell PowerEdge R310英特尔单路机架式服务器 Intel Xeon Processor X3430 2.4GHz, 8MB Cache 8GB内存(2 x 4GB) ...
- php中对共享内存,消息队列的操作
http://www.cnblogs.com/fengwei/archive/2012/09/12/2682646.html php作为脚本程序,通常生命周期都很短,如在web应用中,一次请求就是ph ...
- php消息队列
Memcache 一般用于缓存服务.但是很多时候,比如一个消息广播系统,需要一个消息队列.直接从数据库取消息,负载往往不行.如果将整个消息队列用一个key缓存到memcache里面.对于一个很大的消息 ...
- RabbitMQ消息队列名词解释[转]
从AMQP协议可以看出,MessageQueue.Exchange和Binding构成了AMQP协议的核心,下面我们就围绕这三个主要组件 从应用使用的角度全面的介绍如何利用Rabbit MQ构建 ...
随机推荐
- 3hibernate核心对象关系映射 xxx.hbm.xml
Hibernate的核心就是对象关系映射: 加载映射文件的两种方式: 第一种:<mapping resource="com/bie/lesson02/crud/po/employee. ...
- SqlServer数据库设计一个字段的值是由其他字段运算结果所得
最近在做项目时,发现数据库的一些字段不能执行sql语句进行修改,仔细观察才发现,它是由其他字段运算结果所得.这样就不需程序员通过代码执行运算结果更新数据库,感觉很实用,而网上教材好像还挺少的,所以把教 ...
- c#中Indexof()和Split()的用法
C#中IndexOf的使用 indexOf() 查找字串中指定字符或字串首次出现的位置,返首索引值,如: str1.IndexOf("字"): //查找“字”在str1中的索引值( ...
- Oracle EBS AP取消核销
--取消核销 created by jenrry 20170425 DECLARE l_result BOOLEAN; l_msg_count NUMBER; l_result_n varchar2( ...
- css继承属性与非继承属性
一.无继承性的属性 1.display:规定元素应该生成的框的类型 2.文本属性: vertical-align:垂直文本对齐 text-decoration:规定添加到文本的装饰 text-shad ...
- 免安装PostgreSQL启动服务及创建数据库
安装环境windows7 64位系统 免安装版本postgresql-10.3-1-windows-x64-binaries ===================================== ...
- 认识与入门 MarkDown 标记语言
一.MarkDown 概念: 一种轻量级的标记语言,标记符号不超过十个,现有很多支持MarkDown语法的编辑器以及网站.Markdown从写作到完成,导出格式随心所欲,可以导出HTML,也可以导出P ...
- Centos kernel panic-not syncing:VFS:Unable to mount root fs on unknown block 解决办法
昨晚更新了一下内核,今晚开机就无法进系统了...提示如下图: 解决方案:开机启动时按Esc,然后选择下面的旧版本的内核启动即可. (成功进入系统后,你可以选择改变开机默认选择的内核). uname - ...
- Django商城项目笔记No.12用户部分-QQ登录2获取QQ用户openid
Django商城项目笔记No.12用户部分-QQ登录2获取QQ用户openid 上一步获取QQ登录网址之后,测试登录之后本该跳转到这个界面 但是报错了: 新建oauth_callback.html & ...
- git pull与本地修改冲突
1.先将本地修改存储起来 $ git stash 这样本地的所有修改就都被暂时存储起来 . $ git stash list 可以看到保存的信息: git stash暂 ...