我心中的核心组件~MSMQ与Redis队列
这个文章其实是我心中的核心组件的第七回,确实在时间上有些滞后了,但内容并不滞后!本文MSMQ只是个引题,我确实不太想说它,它是微软自己集成的一套消息队列,寄宿在Window服务里,稳定性十在不敢恭维,而redis队列我们选择的驱动客户端是ServiceStack.Redis,之所以选择它就是因为它稳定,更新快,对于其它的驱动可能用上几年都不会去更新,而ServiceStack.Redis一直走到redis客户端的前沿!
Redis队列实时和非实时:这个说的实时和非实时主要针对的是消费者这边,消息生产者在生产消息后,Redis队列里存储了这些消息,而何时消费就是我们要关心的问题了,非实时是说,在后端有个轮训服务定时从队列里拿消息,这有一定的延时性;实时是说在消费者一边建立Tcp长连接,当队列有数据后马上消费它,当没有数据时线程处于挂起等待状态!
aaarticlea/png;base64,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" alt="" width="549" height="413" />
大叔实时消息队列的消费者实现(Redis队列)
while (true)
{
var redis = Redis.Client.RedisManager.GetClient();//redis连接池 if (redis.GetListCount("queue1") == ) //消息为空挂起
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("队列为空,挂起1秒");
Thread.Sleep();
}
else
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("从队列拿出:" +
redis.PopItemFromList("queue1"));
} }
大叔非实时消息队列的实现
非实时队列主要是在消费者一方采用了某种调度机制,定时去redis队列里去拿数据,逻辑没什么复杂的,大叔采用的调度组件还是Quartz.Net,原因是它功能强大,配置灵活,解耦能力比较强!
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAALkAAACZCAIAAAD8Yww9AAAHf0lEQVR4nO2dMW8bNxiG/R+yabjBgANYGj14LdyxQ1f7BwTI5r8QBIWAKECKDEE6GS4Uw1OhNckgBDmggBcv1dJ2qpQM9mK7A+cO115Px+PHl3dH8Y56HwgBRfFIxnyOR5MfrB1FCMZO6A6Q3kBXCApdISibdmU8Hh+ts+EOkNps1JXxePz8+Q/3dw/5i670CL+ulKaQXJTsLV3pFw6uLBYL19ozIYSXyZVkHVMB1/6QJqCupGk6HA5da6/tSoZsA13ZMJAraZru7e3VGBu6EhN2V3JRnMbmyEYNV0p90J9Q8mOLNMTiSlEUpwE4PT2VXfn44aOTK3kaSRAfSK6URHEaicvLS9mVV69+bN0VxTWvT4yuLBaL4XBo/X1EuFx25fj42IcrphzSHI/7KycnJ7Iuf/z+Z6UrJgm4XgmLR1f07fwS0+nU5ArHu4N4dGU+n8uuZPjrAGkXnjMTFLpCUOgKQaErBIWuEBS6QlDadyVN09brJF2gfVf29/epS5S070qSJKPRqKEuL9+/OJwcZK+3n94opQ4nB/m/pnbxDV+5mPUUbDu3lb24MpvNrLpcXC8fv1sOzpeP3y0vrpfFjzJRvv/pu7ef3rx8/2J2/UvuTfYSmi4l5H42KUBXWiD7IVp1GZwvn31effjtr2efV4PzNVcOJwffvv7m9u62lKnEeUXRFc/4ckUpNZlMRqPRzc2Naw2Hk4OnF09KOeC8oj8dTDmurlhPuZEu9fok3JcraZqORqPZbGYqNjhfFl/Fj1qcV5CEtbba9dRotMt4ccUqivrPlfu7B92VpxdPiuuV6a8/402XEqrqztbLyLVVXuXkSimzp8b4+j1IFkWJrtze3Wa6ZK8mrnRkXnH6qLO078ru7q5VFCU+g+phWgro+fKiwSSBdb0izCJcr1SDiNJl+juWvtn286BEI3SPusu2u0Jw6ApBoSsEha4QFLpCUOgKQWFcHEFhXBxBiScuLm+93paafJV1v24b9vG2Ny5OuLxeAbriTBIoLq75UNEVmXji4kxDZTp51nNcXbGePAv96ePJczxxcfpPX1U9lZCEtYna9dRotDvEExfnOpBhXSll9sIYxsWFdwVsPTjxxMVl4KsTPcd0f5sksK5XhFmE6xWl+h8Xp9OXsfQNz4PKJBqhe9QV6ApBoSsEha4QFLpCUOgKQaErBIVxcQSFcXEEJZ64OH3j3FRG3pgHse7XxbePFywuLmc1Pfv6aGc1PctzfMfF6Z/WHlTXhnpNsLi4nC+jwZfRoJjj++/F0ZV6BI6L0ycV1cbfi9OfMpU9lHOQkXY9eZa7LfwvukCwuLhsOtEnFeX578UpwBVwfjJVK7eO97lrBIuLy2YUfVJRrf69ONNMY7rQVI+1RVPr1np6tC4OFhenqlYqGT7i4iqLmXKCuwK2vmGCxcW1jv7IL6azt8k6lTl6DZVtlRKVVyFTml6ssj9dgHFxdejmWPqG50F2Eo3QPQoDXSEodIWg0BWCQlcICl0hKHSFoDAujqAwLo6gxBMXp2rFqnGHDSequLi8A06fmg53SImo4uKKHcA/pSsgUcXFlTqQv7We/ZqeTXoZPdPamV6cISNEFRdX7EAp3VZCqFnoSRxTV1RxcXkH9LSrENZZBJkhwPV1X4gqLi7vgJ7e5HRS2RP8o84SVVxcKZG/FSYM0/RQyhfWK7I9YHO9IJ64uP6OQV/geRBBoSsEha4QFLpCUOgKQaErBIWuEBTGxREUxsURlHji4hpun1tPAeX6t2HLmN+jWnF5vQJ0xZkEi4tr/XtUFV3xTDzfo6qwCDchx9UV+dgZ7GSPTp7j+R7VvOnS+NVIyPU3qadGo90hnu9RVYaR0O9a/c4uJaz1m9qy1tPrdfG2fI8qUiaUK2DrwYnne1SLs0XlgkAvCS4aTBLI05VevrKY3HSniCcuzh99GUvf8DyoTKIRukddga4QFLpCUOgKQaErBIWuEBS6QlAYF0dQGBdHUOKMi2t9A81a+Tbs2sUTF5efBCn3cziwvFyMrjiThIuLU3UHjK4gRBUXp6oGDD9ktnbM9ZzZVAnPmf8lCRcXp6qG05QQrkIqF2oWanMq3DWiiotThlu/cgIQrkIqb+iK3kmkA2GJKi5OmecVuWRYV5z6EJB44uKUYcUArg+Em9skgXW9IswiXK8oxbi4eOF5UJlEI3SPugJdISh0haDQFYJCVwgKXSEodIWgMC6OoDAujqBEFRdX+lcu2RDrfl18+3iMi/v/2hpsQMruEE9cHF3xTVRxcZVHuGr9cWA6YcaPnUvFhKvAE6W+nDxHFRenTyqVP3FrTnHYhOb0tqwJoQa80VBEFRdX6YqpmJCD39ktuqJ3QG5680QVF9eiK04tltLNXXHtxmaILS5OrY8QuDpR2q0szysmCayVCLPINq5X4ouL0+nmWPqG50F2Eo3QPQoDXSEodIWg0BWCQlcICl0hKN5dOdIYj8e+GyU+COAKdekpG3Ll/u4hf1GXnhLMFasuwbe89K33sP0JTpuurKZnXx/trKZnxcyrq6v5fP5w/3dRl9wYobawY0MzdP4BwLm1fF9RqlYAAAAASUVORK5CYII=" alt="" />
配合Cron表达式功能更强大
aaarticlea/png;base64,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" alt="" />
我心中的核心组件~MSMQ与Redis队列的更多相关文章
- 我心中的核心组件(可插拔的AOP)~大话开篇及目录
回到占占推荐博客索引 核心组件 我心中的核心组件,核心组件就是我认为在项目中比较常用的功能,如日志,异常处理,消息,邮件,队列服务,调度,缓存,持久化,分布式文件存储,NoSQL存储,IoC容器,方法 ...
- c#之Redis队列
摘要 这两天一直在考虑redis队列:一个生产者,多个消费者的情况,这里弄了一个demo进行测试. 一个例子 关于如何引用Redisclient 可以参考之前的这篇文章:c#之Redis实践list, ...
- [bigdata] 使用Redis队列来实现与机器无关的Job提交与执行 (python实现)
用例场景: 定时从远程多台机器上下载文件存入HDFS中.一开始采用shell 一对一的方式实现,但对于由于网络或者其他原因造成下载失败的任务无法进行重试,且如果某台agent机器down机,将导致它对 ...
- c#之Redis队列在邮件提醒中的应用
场景 有这样一个场景,一个邮件提醒的windows服务,获取所有开启邮件提醒的用户,循环获取这些用户的邮件,发送一条服务号消息.但问题来了,用户比较少的情况下,轮询一遍时间还能忍受,如果用户多了,那用 ...
- redis队列的实现
redis中文官网:http://www.redis.cn/ 关于redis队列的实现方式有两种: 1.生产者消费者模式. 2.发布者订阅者模式. 详解: 1.生产者消费者模式. 普通版本: 比如一个 ...
- (3)redis队列功能
Redis队列功能介绍 List 常用命令: Blpop删除,并获得该列表中的第一元素,或阻塞,直到有一个可用 Brpop删除,并获得该列表中的最后一个元素,或阻塞,直到有一个可用 Brpoplpus ...
- 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合
需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...
- 关于访问MSMQ远端私有队列的一点经验
这里应该将私有队列称做"专用队列"好像更贴切一些了,O(∩_∩)O 可以访问远程主机的MSMQ的私有队列的,这个是毋庸置疑的,但需要说明的是不能通过代码创建私有队列,关于这一点,我 ...
- redis 队列缓存 + mysql 批量入库 + php 离线整合
问题分析 思考:应用网站架构的衍化过程中,应用最新的框架和工具技术固然是最优选择:但是,如果能在现有的框架的基础上提出简单可依赖的解决方案,未尝不是一种提升自我的尝试. 解决: 问题一:要求日志最好入 ...
随机推荐
- UIScrollView的三个属性
contentSize.contentOffset.contentInset UIScrollView的frame的size 指的是可视范围 contentSize 内容大小,滚动的范围 创 ...
- redis迁移工具-redis-migrate-tool使用测试
https://github.com/vipshop/redis-migrate-tool一.安装redis-migrate-tool a.下载redis-migrate-tool软件包 https: ...
- Vertica数据查询优化
vertica是惠普公司推出的列式分布式数据库,在OLAP领域有其独到的地方,目前社区版免费,但是只能存放1T的数据.我在工作中维护的bi系统后端就是使用的vertica数据库,平时也经常需要对于数据 ...
- Font Awesome图标库
Font Awesome 是一个非常方便的图标库.这些图标都是矢量图形,被保存在 .svg 的文件格式中.这些图标就和字体一样,你可以通过像素单位指定它们的大小,它们将会继承其父HTML元素的字体大小 ...
- Objective-C Runtime
原文地址:http://tech.glowing.com/cn/objective-c-runtime/ 原作者:顾鹏 如有侵权,请联系本人删除 Objective-C Objective-C 扩展了 ...
- linux Ubuntu(Segmentation fault)段错误出现原因及调试方法
在linux下编译了一个程序,尝试运行的时候出现: Segmentation fault (core dumped) 初步确认为...完全不知道是什么玩意. 于是找度娘了. ----------- ...
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- EventBus的简单使用与原理
一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...
- 如何遍历HashMap
HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的 java Map 遍历速度最优解 第一种: Map map = new HashM ...
- 使用的组件:JQuery UI
jQuery UI包含了许多维持状态的小部件(Widget),因此,它与典型的 jQuery 插件使用模式略有不同.所有的 jQuery UI 小部件(Widget)使用相同的模式,所以,只要您学会使 ...