我是微服务架构的新手,想要创建一个集中式通知微服务来向用户发送电子邮件/短信。
我的第一个选择是创建一个通知 Kafka 队列,所有其他微服务都可以向其中发送通知。然后,通知微服务将侦听该队列并相应地发送消息。如果通知服务重新启动或关闭,我们不会丢失任何消息,因为消息将存储在队列中。
我的第二个选择是在通知微服务上添加通知消息 API。这将使所有其他微服务变得更容易,因为它们只需调用 API,而不需要与队列集成。然后,API 会在内部将消息发送到通知 Kafka 队列并发送消息。这里唯一的问题是,如果 API 不可用或出现错误,我们将丢失消息。
关于处理这个问题的最佳方法有什么建议吗?
小智 5
要么有效。一些可能帮助您做出决定的概念:
面向“Kafka”的服务将有助于:
如果出现以下情况,添加包装器 API 就不太理想了:
您的第一个设计很简单并且可行。如果您正在寻找我概述的优点,那么请考虑您的第二种设计。而且,为了确保我理解它,我会看到它像这样展开:
为了可靠性,服务 A 应作为多个实例运行。