许多业务流程要求在将来某个日期安排事件。例如,在与客户进行初次销售联系后,我们可能希望在将来的某个时间安排跟进电话。EasyNetQ可以通过其Future Publish功能帮助您实现此功能。例如,这里我们使用FuturePublish扩展方法来安排未来一个月的后续销售电话。请注意,FuturePublish使用UTC时间。

var followUpCallMessage = new FollowUpCallMessage( .. );
bus.FuturePublish(DateTime.UtcNow.AddMonths(), followUpCallMessage);

三个月后,EasyNetQ将发布消息,FollowUpCallMessage的任何订阅者都将收到原始消息的副本。

FuturePublish要求EasyNetQ.Scheduler服务正在运行。

它是如何工作的?

当您调用bus.FuturePublish(publishDate,message)时,EasyNetQ将您的消息包装在系统消息“ScheduleMe”中并将其发布到RabbitMQ。调度程序服务订阅此消息。收到ScheduleMe消息时,它会将其存储在本地数据库中。调度程序服务轮询其数据库以查找计划日期到期的消息,当它找到任何到期消息时,它会从ScheduleMe消息中解包原始消息并将其发布到总线。

安装调度程序服务

  1. 在SQL Server中,创建一个新的数据库EasyNetQ.Scheduler

  2. 获取EasyNetQ的源代码

    git clone git@github.com :mikehadlow/EasyNetQ.git

  3. 在Visual Studio中打开EasyNetQ.2012解决方案。在DatabaseScripts - > EasyNetQ.Scheduler文件夹中,您将找到许多SQL脚本。在EasyNetQ.Scheduler数据库中打开并运行它们。您将需要首先运行CreateWorkTables.sql,其他是存储过程脚本,并且可以按任何顺序运行。

  4. 构建解决方案。

  5. 找到\ Source \ EasyNetQ.Scheduler \ bin \ Debug并将内容复制到您选择的部署文件夹中。

  6. 在文本编辑器中打开EasyNetQ.Scheduler.exe.config并将'rabbit'和'scheduleDb'连接字符串分别更改为指向RabbitMQ代理和SQL Server实例。

  7. 打开控制台窗口并更改部署EasyNetQ.Scheduler的文件夹的路径。

  8. 运行以下命令将EasyNetQ.Scheduler安装为Windows服务:

    EasyNetQ.Scheduler.exe install
    Configuration Result: [Success] Name EasyNetQ.Scheduler [Success] ServiceName EasyNetQ.Scheduler Topshelf v3.1.106., .NET Framework v4.0.30319.
    
    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

【EasyNetQ】- 使用Future Publish调度事件的更多相关文章

  1. EasyNetQ使用(七)【发布者确认 ,用Future Publish发布预定中事件 】

    AMQP发布消息默认情况下是非事务性的,不能确保你的消息真正送达代理.AMQP可以去指定事务性发布,但是RabbitMQ这样会非常慢,我们没有让EasyNetQ API去支持此功能.为了高效的确保投递 ...

  2. 14-EasyNetQ之用Future Publish发布预定中事件

    很多商业流程需要事件在未来的时间按照预定时间发布.例如,在初次与客户接触后,可以在未来某个时间去电话回访客户.EasyNetQ可以用它的Future Publish功能帮你实现这个功能.举例:这里我们 ...

  3. 使用kbmmw 的调度事件动态显示时间

    kbmmw 里面提供了强大的事件调度功能,今天简单演示一个使用调度事件在窗体上显示时间. 建立一个新工程. 放上几个控件 在窗体里面引用单元 kbmMWScheduler, 然后添加过程 unit U ...

  4. MySQL 5.6 主从复制如何处理——触发器,函数,存储过程,调度事件

      截图来自MySQL5.6的pdf版文档. 说明: 1)基于语句的复制时,trigger会在slave上执行,所以slave上也需要有trigger的定义,不然会导致主从数据不一致的: 2)基于行的 ...

  5. 在指定时间干,必须干(kbmmw 中的事件调度)

    从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件, ...

  6. python事件调度库sched

    事件调度 sched模块内容很简单,只定义了一个类.它用来最为一个通用的事件调度模块. class sched.scheduler(timefunc, delayfunc)这个类定义了调度事件的通用接 ...

  7. 11,EasyNetQ-调度事件与定时发布

    许多业务流程都要求将事件安排在未来的某个日期. 例如,在与客户进行初次销售联系之后,我们可能希望在将来某个时间安排后续电话. EasyNetQ可以通过其未来发布功能帮助您实现此功能. 例如,我们在这里 ...

  8. EasyNetQ使用(八)【对延迟消息插件的支持,自动订阅者】

    RabbitMQ延迟消息插件仍然在实验阶段.你使用这个功能要自担风险. RabbitMQ延迟消息插件为RabbitMQ增加了新的交换机类型,允许延时消息投递. EasyNetQ为交换机通过定义一种新的 ...

  9. 使用Future、asyncio处理并发

    并发的意义 为了高效处理网络I/O,需要使用并发,因为网络有很高的延迟,所以为了不浪费CPU周期去等待,最好在收到网络响应之前做些其他的事. 在I/O密集型应用中,如果代码写得正确,那么不管是用哪种并 ...

随机推荐

  1. js中判断数组中是否包含某元素的方法

    方法一:array.indexOf(item,start):元素在数组中的位置,如果没与搜索到则返回 -1. 参数 描述 item 必须.查找的元素. start 可选的整数参数.规定在数组中开始检索 ...

  2. SPOJ8222 NSUBSTR - Substrings(后缀自动机)

    You are given a string S which consists of 250000 lowercase latin letters at most. We define F(x) as ...

  3. 19-2-28Python的了解以及变量、常量、数据类型、if语句的结构

    Python目前有两个大版本,一个是2.x版本,一个是3.x版本. Python2x:源码冗余,混乱:且默认ASCII码,只能识别英文字母数字. Python3x:源码整合,美观,清晰,简单.默认ut ...

  4. 编程 - 前端 - JavaScript - 库 - ECharts (开源可视化)

    ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等) ...

  5. PHP导出数据到表格的实例

    我发现最近的项目需要导出Excel表的页面非常的多,想来这个也是我们常用的功能了,现在我可以很熟练的导出了,但是记得当时自己第一次导出时还是绕了一些弯路的,那么现在我就来记录下我这次用exshop框架 ...

  6. YII2 多MongoDB配置和使用

    1:在config/web.php 文件下配置多个连接即可: 注意在componets 下 'mongodb' => [ 'class' => '\yii\mongodb\Connecti ...

  7. kafka概述

    kafka概述 Apache Kafka是一个开源 消息 系统,由Scala写成.是由Apache软件基金会开发的一个开源消息系统项目. Kafka最初是由LinkedIn开发,并于2011年初开源. ...

  8. RubyMine常用快捷键

    一级必会 Shift+F10:运行running Ctrl+Alt+R:弹出RakeCtrl+Alt+G:弹出GenerateCtrl+Alt+L:格式化代码Alt+F1:切换视图(Project, ...

  9. Python自动化运维——系统性能信息模块

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:psutil psutil是一个跨平台库,可以很轻松的为我们实现获取系统运行的进程和资源利用率等信息. 功能 ...

  10. HDU暑假多校第六场K-werewolf

    一.题意 好人必然说真话,坏人不一定说真话,给定N个人的言论<每人一个发言.不谈及自己>,要求指出有多少个人一定是好人,有多少个人一定是坏人.#define 狼人 坏人#define 村民 ...