17、Scheduling Events with Future Publish 用Future Publish发布日程事件

许多业务流程需要在将来的某个日期安排事件。例如,在初次与客户接触后,我们希望把未来某个时间电话回访客户列入日程。EasyNetQ可以用它的Future Publish帮你实现这个功能。举例:这里我们使用FuturePublish() 扩展方法把一个月后的电话回访列入日程。注意:FuturePublish使用UTC时间。

var followUpCallMessage = new FollowUpCallMessage(..);//实例化一个消息

bus.FuturePublish(DateTime.UtcNow.AddMonths(1), followUpCallMessage);

1个月后,该消息将由EasyNetQ发布,任何FollowUpCallMessage的订阅者将接收到一个原始消息副本。

注意:FuturePublish需要EasyNetQ.Scheduler服务(需要在操作系统上安装该服务)处于运行状态。

 

它是如何运作的?

当你调用bus.FuturePublish(publishDate, Message)时,EasyNetQ(发布者)把这个原始消息封包到一个系统消息'ScheduleMe'中,然后把ScheduleMe发布到RabbitMQ。

订阅者通过EasyNetQ.Scheduler服务订阅这个消息,当该服务接收到一个ScheduleMe消息时,它会把这个消息先存储到它的本地数据库中。该服务会轮询数据库,查询日程到期的消息,当有任何消息到期时,它会从这个ScheduleMe消息中拆包出原始的消息,然后把原始消息发送到订阅者bus。

安装调度服务

  1. 在SQL Server中,创建一个名称为EasyNetQ.Scheduler的数据库。(擦,如果用sqlite不是更好吗?)

  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.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

posted on 2017-12-05 17:33  困兽斗  阅读(148)  评论(0编辑  收藏  举报

导航