许多业务流程要求在将来某个日期安排事件。例如,在与客户进行初次销售联系后,我们可能希望在将来的某个时间安排跟进电话。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. Webpack4 学习笔记六 多页面配置和devtool

    webpack 多页配置 webpack可以配置单页应用, 也可以配置多页应用. 区别在于, 单页应用entry入口只有一个, 而多页应用入口有多个 webpack配置: const path = r ...

  2. aes 加密,解密

    Javaaes加密: package com.sh.auth.util; import java.security.InvalidKeyException; import java.security. ...

  3. 【网络流】EK算法及其优化

    今天上午我仿佛知道了什么叫做网络流,这里推荐一篇博客,大家入门网络流的可以看一下这篇博客,保证一看就懂! 博客链接: 网络流入门 这里有一篇经过我改过的EK带注释代码(博客里也有一样的,只是加了一些注 ...

  4. ABAP术语-Fiscal Year

    Fiscal Year 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/02/1062109.html Generally a period ...

  5. union的两个子查询是否并行

    需求描述 问题:subquery 1 union subquery2,其中union左右的两个子查询是否并行. 场景:业务中性能敏感的业务,希望能加快速度,如果数据库能两个子查询并行执行,既可以节省时 ...

  6. 关于mysql8.0.11版本在win10安装

    新的mysql版本没有.exe文件一键安装,网上找了教程,自己搞了下 首先是在菜鸟教程 http://www.runoob.com/mysql/mysql-install.html 根据它的提示下载w ...

  7. vuex组件 vuex-persistedstate

    vuex用于管理项目中的全局状态,但是我们一刷新vuex中保存的全局状态就会被全部初始化,虽然我们也可以同事缓存到storage中做两步操作,但是vuex-persistedstate组件已经帮我们完 ...

  8. JavaScript : CORS和Ajax请求

    CORS(Cross-Origin Resource Sharing, 跨源资源共享)是W3C出的一个标准,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是 ...

  9. ELK 分布式日志实战

    一.  ELK 分布式日志实战介绍 此实战方案以 Elk 5.5.2 版本为准,分布式日志将以下图分布进行安装部署以及配置. 当Elk需监控应用日志时,需在应用部署所在的服务器中,安装Filebeat ...

  10. html 弹框 优化 alert

    <!DOCTYPE html> <html> <head> <title>cs</title> </head> <styl ...