作业/cron任务的微服务

作业/cron任务的微服务,cron,scalability,microservices,Cron,Scalability,Microservices,例如,我想要一个微型服务来发送通知(电子邮件、短信、推送通知)。对于少数用户来说,一切都正常。一段时间后,我们的应用程序会有很多用户,因此,此微服务无法管理,并且电子邮件会在1小时后发送 那么,如何处理这种情况呢?部署另一个microservice实例,但如何处理只有一个microservice处理一封电子邮件而用户不接收多封电子邮件的问题?1)您可以创建协调服务,该服务将使用持久存储(如数据库表)为发件人安排任务。此服务将向表中添加发送作业记录,发送方服务将在循环get job中扫描表,将其标

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

那么,如何处理这种情况呢?部署另一个microservice实例,但如何处理只有一个microservice处理一封电子邮件而用户不接收多封电子邮件的问题?

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

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

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

我可以看到下一个结构:

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

EmailNotificationService、SMSNotificationService、PuthNotificationService-实际发件人。您可以根据需要运行每个实例的任意多个实例。他们需要访问数据库或通知发送者服务队列。

1)您可以创建协调服务,该服务将使用类似数据库表的持久存储为发送者安排任务。此服务将向表中添加发送作业记录,发送方服务将在循环get job中扫描表,将其标记为正在处理,以便其他实例不会获得相同的作业

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

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

我可以看到下一个结构:

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


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

需要为此设置消息传递

通常使用持久队列,如RabbitMQ。然后,负责发送电子邮件的微服务使用队列中的消息并对其进行适当处理


如果您遇到电子邮件微服务的单个实例不够的问题,您可以简单地派生另一个实例并立即部署它。这是因为当消息队列中的消息被使用时,它将消失,除非您告诉它返回(需要重新查询)。也就是说,任何成功发送的电子邮件都将使用该消息,因此发送电子邮件的请求不再在系统中。

需要为此设置消息

通常使用持久队列,如RabbitMQ。然后,负责发送电子邮件的微服务使用队列中的消息并对其进行适当处理


如果您遇到电子邮件微服务的单个实例不够的问题,您可以简单地派生另一个实例并立即部署它。这是因为当消息队列中的消息被使用时,它将消失,除非您告诉它返回(需要重新查询)。也就是说,任何成功发送的电子邮件都会占用邮件的资源,因此发送电子邮件的请求不再在系统中。

但是谁将邮件放入队列?例如,如果有后台任务确定要发送电子邮件,则将“发送电子邮件消息”放入队列。但是,如果此服务有多个实例,那么同一消息将多次放入队列,因此同一电子邮件将发送多次。但是谁将消息放入队列?例如,如果有后台任务确定要发送电子邮件,则将“发送电子邮件消息”放入队列。但是,如果此服务有多个实例,那么同一消息将多次放入队列,因此同一电子邮件将被发送多次。