.net 使用排队系统执行自定义逻辑

.net 使用排队系统执行自定义逻辑,.net,notifications,queue,message-queue,.net,Notifications,Queue,Message Queue,我正在开发一个通知引擎,这个通知引擎将向几个接收者发送几种类型的通知 电子邮件通知 推送通知 当某个客户端与通知引擎通信以发送通知时,该引擎必须在与接收方通信之前将该通知存储在某个队列中 我要求流程如下所示: 然后通知引擎必须检查接收者现在是否能够发送通知 如果接收者可以发送通知,消息将被发送给它 如果接收方无法发送通知,则消息必须留在队列中,然后尝试稍后处理 例如,如果我正在发送电子邮件通知,则电子邮件收件人正在运行,但SMTP服务器不可访问,因此收件人将无法发送电子邮件通知。通知应保留在队

我正在开发一个通知引擎,这个通知引擎将向几个接收者发送几种类型的通知

  • 电子邮件通知
  • 推送通知
  • 当某个客户端与通知引擎通信以发送通知时,该引擎必须在与接收方通信之前将该通知存储在某个队列中

    我要求流程如下所示:

  • 然后通知引擎必须检查接收者现在是否能够发送通知
  • 如果接收者可以发送通知,消息将被发送给它
  • 如果接收方无法发送通知,则消息必须留在队列中,然后尝试稍后处理
  • 例如,如果我正在发送电子邮件通知,则电子邮件收件人正在运行,但SMTP服务器不可访问,因此收件人将无法发送电子邮件通知。通知应保留在队列中,稍后将进行处理。

    我知道我可以使用几种排队系统,如MSMQRabbitMQ


    为了开发我的逻辑并满足要求,我可以使用哪些最佳实践?

    如果smtp服务器无法访问,为什么通知引擎无法将邮件发送到电子邮件收件人?电子邮件接收者可以有一个队列,只有smtp服务器可访问时,它才会将邮件解列。我正在尝试统一通知引擎中的排队逻辑,我不希望每个接收者都实现自己的排队系统。如果我将排队逻辑放在电子邮件接收者中,当SMTP准备就绪时,我如何执行发送电子邮件的逻辑。仅当SMTP服务器可访问时,电子邮件接收器/电子邮件服务(负责向SMTP服务器发送电子邮件的服务)才会将邮件从其队列中排出。电子邮件接收者有责任知道smtp是否可访问,而不是通知引擎。通知引擎将通知请求消息发送到负责通知的服务/接收者的队列中。每个服务都有一个专用队列。只有在技术上能够处理请求的情况下,服务才会将消息出列。因此,通知引擎和服务是松散耦合的