job/cron 任务的微服务

Microservices for job/cron tasks

例如我想要一个微服务来发送通知(电子邮件、短信、推送通知)。少数用户一切正常。一段时间后,我们的应用程序有很多用户,因此,该微服务不进行管理,并在 1 小时后发送电子邮件。

那么,如何处理这种情况呢?部署另一个微服务实例,但是如何处理只有一个微服务处理一封电子邮件而用户收不到多封电子邮件?

1) 您可以创建协调服务,使用持久存储(如数据库 table)为发送者安排任务。此服务会将发送作业记录添加到 table 中,发件人服务将在循环中扫描 table 获取作业,将其标记为正在处理,以便其他实例不会获得相同的作业。

2) 您可以使用 Azure ServiceBus 等队列从协调服务发送作业。

此外,如果您使用的是微服务,我会建议通过传输将发送服务分开,以便您可以单独扩展它们。

我可以看到下一个结构:

NotificationSenderService - 发送协调器您通常只需要一个这样的实例。此服务的职责是接收发送通知请求并使用队列或数据库创建作业

EmailNotificationService、SMSNotificationService、PuthNotificationService - 实际发件人。您可以根据需要 运行 每个实例的任意数量。他们需要访问 NotificationSenderService 的数据库或队列。

需要为此设置消息传递。

通常使用持久化队列,例如 RabbitMQ。负责发送电子邮件的微服务然后使用队列中的消息并适当地处理它们。

如果您 运行 遇到电子邮件微服务的单个实例不够用的问题,您可以简单地分叉另一个实例并立即部署它。这是因为当来自消息队列的消息被消费时,它就消失了,除非你告诉它 return(重新排队)。 IE。任何成功发送的电子邮件都将使用该消息,因此发送电子邮件的请求不再在系统内。