14-EasyNetQ之用Future Publish发布预定中事件
很多商业流程需要事件在未来的时间按照预定时间发布。例如,在初次与客户接触后,可以在未来某个时间去电话回访客户。EasyNetQ可以用它的Future Publish功能帮你实现这个功能。举例:这里我们使用FuturePublish扩展方法去预定未来一个月后打销售回访电话。注意:FuturePublish使用UTC时间。
var followUpCallMessage = new FollowUpCallMessage(..);
bus.FuturePublish(DateTime.UtcNow.AddMonths(1),followUpCallMessage);
从现在开始一个月后,这个消息通过EasyNetQ将会发布这个消息,任何FollowUpCallMessage的订阅者将接收到一个原始消息拷贝。
FuturePublish需要EasyNetQ.Scheduler服务处于运行中状态。
它是如何运作的?
当你调用bus.FuturePublish(publishDate,Message)时,EasyNetQ包装这个消息到一个系统消息'ScheduleMe'中,然后发布这个消息到RabbitMQ。这个调度服务订阅这个消息。当它接收到一个ScheduleMe消息时,它会存储这个消息到它的本地数据库中,这个调度服务去数据库查询日程日期到期的消息,当有任何消息到期时,它会从这个ScheduleMe消息中解开原始的消息,然后发送消息到事件总线。
安装调度服务
在SQL Server中,创建一个名称为EasyNetQ.Scheduler的数据库。
获取EasyNetQ源码
git clone git@github.com:mikehadlow/EasyNetQ.git
在Visual Studio中打开EasyNetQ.2012这个解决方案。在DatabaseScripts->EasyNetQ.Scheduler文件夹下你会发现一些SQL脚本。在EasyNetQ.Scheduler数据库中打开并执行这些脚本。你需要先执行CreateWorkTables.sql,其他是存储过程脚本,执行这些脚本没有先后顺序。
编译这个解决方案。
找到\Source\EasyNetQ.Scheduler\bin\Debug 这个文件夹,拷贝其下所有文件到你选择的部署文件夹中。
用一个文本编辑器打开EasyNetQ.Scheduler.exe.Config ,修改'rabbit'和'scheduleDb'连接字符串为你的RabbitMQ代理和SQL Server各自的实例。
打开控制台窗口,进入你部署EasyNetQ.Scheduler所在的文件夹。
运行后面的命令,把EasyNetQ.Scheduler安装为一个windows 服务。
EasyNetQ.Scheduler.exe install
执行后,显示下面信息:
Configuration Result: [Success] Name EasyNetQ.Scheduler [Success] ServiceName EasyNetQ.Scheduler Topshelf v3.1.106.0, .NET Framework v4.0.30319.18051
Running a transacted installation.
Beginning the Install phase of the installation. Installing EasyNetQ.Scheduler service Installing service EasyNetQ.Scheduler... Service EasyNetQ.Scheduler has been successfully installed. Creating EventLog source EasyNetQ.Scheduler in log Application...
The Install phase completed successfully, and the Commit phase is beginning.
The Commit phase completed successfully.
The transacted install has completed.
现在你应该能够调用FuturePublish方法,在指定时间到来时,你会收到消息。
卸载EasyNetQ.Scheduler,运行:
EasyNetQ.Scheduler.exe uninstall
英文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Scheduling-Events-with-Future-Publish
本文地址:http://www.cnblogs.com/HuangLiang/p/EasyNetQ_Scheduling_Events_with_Future_Publish.html
我的微信订阅号:open_dotNET
14-EasyNetQ之用Future Publish发布预定中事件的更多相关文章
- EasyNetQ使用(七)【发布者确认 ,用Future Publish发布预定中事件 】
AMQP发布消息默认情况下是非事务性的,不能确保你的消息真正送达代理.AMQP可以去指定事务性发布,但是RabbitMQ这样会非常慢,我们没有让EasyNetQ API去支持此功能.为了高效的确保投递 ...
- 【EasyNetQ】- 使用Future Publish调度事件
许多业务流程要求在将来某个日期安排事件.例如,在与客户进行初次销售联系后,我们可能希望在将来的某个时间安排跟进电话.EasyNetQ可以通过其Future Publish功能帮助您实现此功能.例如,这 ...
- 【转】npm publish 发布
<h3 class="catListTitle">一.npm包结构(编写)</h3> npm包实际是一个存档文件,即一个目录直接打包为.zip或tar.gz ...
- 中国版 Ubuntu Kylin 14.04 LTS 麒麟操作系统中文版发布下载 (Ubuntu天朝定制版)
中国版 Ubuntu Kylin 14.04 LTS 麒麟操作系统中文版发布下载 (Ubuntu天朝定制版) http://www.iplaysoft.com/ubuntukylin.html
- npm publish 发布
前言 我们npm publish发布的时候,一定是本地文件发布到远程仓库,并且登录到http://registry.npmjs.org(即npm adduser或npmlogin)之后,才可以进行发布 ...
- iOS已发布应用中对异常信息捕获和处理
iOS已发布应用中对异常信息捕获和处理 iOS开发中我们会遇到程序抛出异常退出的情况,如果是在调试的过程中,异常的信息是一目了然,但是如果是在已经发布的程序中,获取异常的信息有时候是比较困难的. iO ...
- Expo大作战(八)--expo中的publish以及expo中的link,对link这块东西没有详细看,大家可以来和我交流
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...
- 12月6日PHPCMS取内容发布管理中的来源
调取内容发布管理中的来源,如果直接写{$val['copyfrom']}调取出来的内容为 内容|0 ,要先根据"|"进行拆分,然后再写. 示例: <!--新闻开始--& ...
- 在TFS持续集成(持续发布)中执行Telnet任务
Telnet是一种在因特网或局域网上使用虚拟终端连接,提供双向交互式文本通信设备的协议. 它是最早的互联网通讯协议之一.自1969年启用以来,已经经过了将近50年时间,在开放式的操作系统中拥有广泛的用 ...
随机推荐
- redis memcache rabbitMQ
Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动 ...
- Ubuntu 中 java 环境 (sunjdk) 的配置 (附详细说明)
暑假以来为了鼓捣双系统废了很大的劲儿,本来一股脑想装 CentOS,无奈怎么处理分区引导都不能成功地与 Win8 共存,最终用 Ubuntu 一句 "检测到系统上有 Windows Boot ...
- [转载]Lwip之IP/MAC地址冲突检测
from: http://blog.csdn.net/tianjueyiyi/article/details/51097447 LWIP是个轻量级的TCP/IP协议栈,之所以说轻量级,是因为作者将主体 ...
- Android 拍照或从相册取图片并裁剪
在Android中,Intent触发Camera程序,拍好照片后,将会返回数据,但是考虑到内存问题,Camera不会将全尺寸的图像返回给调用的Activity,一般情况下,有可能返回的是缩略图,比如1 ...
- Spring字符编码过滤器
1 <filter> 2 <filter-name>characterEncodingFilter</filter-name> 3 <filter-class ...
- 压缩感知Compressive sensing(一)
compressive sensing(CS) 又称 compressived sensing ,compressived sample,大意是在采集信号的时候(模拟到数字),同时完成对信号压缩之意. ...
- 51nod 1089 最长回文子串 V2(Manacher算法)
回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入一个字符串Str,输出Str里最长回文子串的长度. 收起 输入 输入Str(Str的长度 <= 100000) ...
- Robot Framework接口测试(3)--http请求之post
http请求更多的是post请求,我们可以:查看说明:很多网站在登录的时候需要加上头部信息即headers,这个信息可以通过抓包工具获得——fiddler,一个轻量级的抓包工具,大神用了都说好~这里模 ...
- 【java规则引擎】基本语法和相关属性介绍
一个规则的语法信息 [1]条件部分(LSH部分)===>规则pattern之间的连接条件符号: (1)LHS 部分是由一个或多个条件组成,条件又称之为 pattern(匹配模式),多个 pa ...
- bzoj 4104 [Thu Summer Camp 2015]解密运算——思路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4104 想了很久,想出一个 nlogn (也许是 n2logn )的,可惜空间是 n2 . 已 ...