许多业务流程要求在将来某个日期安排事件。例如,在与客户进行初次销售联系后,我们可能希望在将来的某个时间安排跟进电话。EasyNetQ可以通过其Future Publish功能帮助您实现此功能。例如,这里我们使用FuturePublish扩展方法来安排未来一个月的后续销售电话。请注意,FuturePublish使用UTC时间。
var followUpCallMessage = new FollowUpCallMessage( .. ); bus.FuturePublish(DateTime.UtcNow.AddMonths(3), 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