1

我正在为一个项目评估带有 RabbitMQ 的 MassTransit,我们希望能够将消息的处理延迟到某个时间。

目标如下:

  • 一个用户做了一些影响其他用户的事情
  • 一小时后会向公交车发送一条消息通知受影响的用户
  • 用户做更多事情并发送更多通知
  • 一个小时过去了,然后:
    • 自上次摘要以来已经过去了一个多小时:消息已处理,收集每个用户的所有待处理通知,如果至少有一个,则向他们发送摘要。
    • 距离上次总结不到一小时:消息未处理,又排了一个小时。

问题是可以通知很多事情,所以我们不想立即发送,而是稍后总结。这可以用 MassTransit 和 RabbitMQ 完成吗?

4

2 回答 2

3

我意识到这是一篇旧帖子,但任何想要解决这个问题的人都应该查看https://github.com/MassTransit/MassTransit-Quartz

本质上,您发布了一条延迟消息,它应该重新发布到总线上,并且 Quartz 服务(在项目中提供)负责将其持久化到临时存储,然后在时机成熟时将其发布出去。

于 2013-11-15T17:27:36.320 回答
0

我认为您希望将其分为两个阶段,以便消息在到达时进行处理,但直到需要时才采取行动。

  1. MassTransit 进程接收消息,并将通知保存在某种数据存储中。

  2. 您还有一个汇总过程,它偶尔会运行,查看数据存储以查看未完成的内容,如果距离上次汇总超过一个小时,则将汇总通知发送给用户。

编辑:有可能破解 RabbitMQ 来做到这一点,请参阅http://www.javacodegeeks.com/2012/04/rabbitmq-scheduled-message-delivery.html

于 2012-05-31T14:21:12.137 回答