【发布时间】:2019-11-08 16:19:31
【问题描述】:
我正在构建一个微服务解决方案,其中大多数代码将是 C#,并且很可能是任何前端的 Angular。我的问题是关于消息链。我仍在弄清楚要使用什么消息代理; Azure Service Bus , RabbitMQ 等。有一个我没有找到太多的概念。
当我想在一组特定的消息被触发时触发消息时,如何处理这种情况。一个例子,但不是我实际解决方案的一部分:我想说在支付账单时通知某人。我们发消息"PAIDBILL"
这将触发将独立处理的微服务:
FinanceService 借记账本并解雇
"PaymentPosted"EmailService:向客户发送电子邮件,感谢您支付账单
"CustomerPaymentEmailSent"DiscountService:检查他们是否因按时付款而获得折扣,然后发送
"CustomerCanGetPaymentDiscount"
如果所有三个消息都针对同一PAIDBILL 触发:消息"PaymentPosted"、"CustomerPaymentEmailSent"、"CustomerCanGetPaymentDiscount"
然后我想给客户发邮件说他们下一张账单会打折。必须在所有三个都触发并且顺序无关紧要之后完成。如何安排发送新消息 "EmailNextTimeDiscount" 消息,而不必每分钟、每小时、每天轮询触发了哪些消息?
我能想到的就是有一个 SQL 表,它标记每个表都已完成(通过锁定表),当最后一个表被填满时,然后发送消息。这会是一个很好的解决方案吗?我发现它是微服务和消息队列设计的反模式。
【问题讨论】:
标签: microservices message-queue serverless-architecture