例如,我想要一个微服务来发送通知(电子邮件,短信,推送通知)。对于少数用户来说,一切都很好。经过一段时间我们的应用程序有很多用户,所以,这个微服务doe不管理,并在1小时后发送电子邮件。
那么,如何处理这种情况呢?部署另一个微服务实例,但如何只处理一个微服务进程,一个电子邮件和用户不会收到多封电子邮件?
答案 0 :(得分:2)
需要为此设置消息。
使用诸如RabbitMQ之类的持久队列是很常见的。负责发送电子邮件的微服务然后消耗来自队列的消息并适当地处理它们。
如果您遇到单个电子邮件微服务实例不够的问题,您可以简单地分叉另一个实例并立即部署它。这是因为当消息来自消息队列的消息被消耗时,它将消失,除非您告诉它返回(要重新排队)。即任何成功发送的电子邮件都将使用该消息,因此发送电子邮件的请求不再在系统内。
答案 1 :(得分:0)
1)您可以创建协调服务,该服务将使用持久存储(如数据库表)为发件人安排任务。此服务将发送作业记录添加到表中,发送方服务将在循环获取作业中扫描表,将其标记为处理,以便其他实例不会获得相同的作业。
2)您可以使用Azure ServiceBus等队列从协调服务发送作业。
此外,如果您使用微服务,我建议您通过传输分开发送服务,以便您可以单独扩展它们。
我可以看到下一个结构:
NotificationSenderService - 发送协调器通常只需要一个这样的实例。此服务的职责是接收发送通知请求并使用队列或数据库创建作业
EmailNotificationService,SMSNotificationService,PuthNotificationService - 实际发件人。您可以根据需要运行每个实例。他们需要访问NotificationSenderService的数据库或队列。