背景 工作中经常会有定时任务的需求,常见的做法可以使用Timer.Quartz.Hangfire等组件,这次想尝试下新的思路,使用RabbitMQ死信队列的机制来实现定时任务,同时帮助再次了解RabbitMQ的死信队列. 交互流程 1. 用户创建定时任务 2. 往死信队列插入一条消息,并设置过期时间为首个任务执行时间 3. 死信队列中的消息过期后,消息流向工作队列 4. 任务执行消费者监听工作队列,工作队列向消费者推送消息 5. 消费者查询数据库,读取任务信息 6. 消费者确认任务有效(未被撤销…
背景 有一套特定规格的应用(程序+数据库),当有业务需求时,就需要多部署应用,并且所有的应用都使用一个共同的后台来管理.应用新增后,如何通知后台更新连接串成了一个关键的问题.于是就产生了使用ZooKeeper管理数据库连接串的奇思异想.具体方案如下: 1. 运维负责搭建数据库,并执行初始化脚本,然后把对应的数据库配置刷入ZooKeeper: 2. 运维完成App(1...N)的部署,App(1...N)从ZooKeeper读取对应的数据库配置: 3. 后台监听ZooKeeper,更新数据库配置到…
转载地址:http://www.cnblogs.com/ldp615/archive/2011/08/01/distinct-entension.html 刚看了篇文章 <Linq的Distinct太不给力了>,文中给出了一个解决办法,略显复杂. 试想如果能写成下面的样子,是不是更简单优雅: 1 2 var p1 = products.Distinct(p => p.ID); var p2 = products.Distinct(p => p.Name); 使用一个简单的 lamb…
# 扩展方法出来已久,介绍扩展方法的文章也很多,但都是笼统的.本人最近一直在思考扩展方法的应用,也悟出了一些,准备将这最近一段时间对扩展方法的思考,写成一个系列文章.每个文章只介绍一个应用方面,篇幅不会太长. 先声明一下,本系列文章主要为提供一个新的编程的思路(所提供的代码仅供参考,不足处请包涵),希望大家把讨论的重点放在编程思想上. 打算将文章写成三个部分:基础篇.高级篇.变态篇. 1.基础篇简单易懂,主要是一些常用操作. 2.高级篇会将扩展方法与泛型.委托.lambda表达式.反射.异步调用…
本文转载:http://www.cnblogs.com/ldp615/archive/2009/08/07/1541404.html 其中本人觉得很经典的:c# 扩展方法奇思妙用基础篇五:Dictionary<TKey, TValue> 扩展 地址:http://www.cnblogs.com/ldp615/archive/2011/01/28/1947205.html…
刚看了篇文章 <Linq的Distinct太不给力了>,文中给出了一个解决办法,略显复杂. 试想如果能写成下面的样子,是不是更简单优雅 var p1 = products.Distinct(p => p.ID); var p2 = products.Distinct(p => p.Name); 使用一个简单的 lambda 作为参数,也符合 Linq 一贯的风格. 可通过扩展方法实现: Distinct 扩展方法 首先,创建一个通用比较的类,实现 IEqualityComparer…
本文主要讲解如何通过RabbitMQ实现定时任务(延时队列) 环境准备 需要在MQ中进行安装插件 地址链接 插件介绍地址:https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/ 使用场景 作为一个新的预支付订单被初始化放置,如果该订单在指定时间内未进行支付,则将被认为超时订单进行关闭处理:电商系统中应用较多,用户购买商品产生订单,但未进行支付,订单产生30分钟内未支付将关闭订单(且满足该场景数量庞大)…
for循环: for i in range(10): # i循环10次 print('------',i) for j in range(10): print(j) if j > 2 : break #跳出循环体 while循环: age_oldboy_guess = 50conet = 0# age_guess = int(input('age_oldboy_guess:'))# if age_oldboy_guess == age_guess:# print('猜对了!')# print('…
下面是 Queryable 类 中最常用的两个排序的扩展方法: 1 2 public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector); public static IOrderedQueryable<TSource>…
整理大部分来源信安之路 对于隐蔽来说,有以下几点要素: 1.熟悉环境,模拟环境,适应环境,像一只变色龙一样隐藏 2.清除痕迹,避免运维发现 3.避免后门特征值被 D 盾等工具检测到 姿势 一般过狗思路 最一般的绕狗.后门思路就是 call_user_func('assert', $_REQUEST['pass']) 直接参数回调,将$_REQUEST['pass']传入的数据,传递给 assert 函数去执行. 双参数回调后门 在 PHP5.4.8+ 版本中,assert 有一个新的可选参数 d…