当通过http请求在Microservices之间进行相互通信时,很容易将错误消息回复给用户,您只需捕捉到不同服务的错误并将其转发给用户即可。
但是,在通过消息队列进行通信时,错误处理是如何工作的呢?
例如,用户向Auth Service发出请求,Auth Service发布一条消息,指示需要创建一个新用户。用户服务将使用此消息并尝试创建新用户。但是,如果用户服务抛出错误,可能已经收到了电子邮件。我们如何通知用户他的请求失败?
我的猜测是,不可能用此错误响应用户,因为对Auth Server的初始请求在将消息发布到队列后已经关闭。这是否是同步通信的一个更好的例子?
client -> Auth Service User Service
| ↑ |
| create User create User | | Fails to create User
| | |
↓ | ↓
----------------------Async Queue----------------------发布于 2021-11-24 00:06:12
一般来说,您有两种选择:
第一种是传回信息。用户服务知道auth服务发送了请求,因此将通过报告错误(或成功)来完成循环。
第二个选项是在消息队列旁边有一个公共DB。该通用DB存储有关作业的信息,包括时间、状态和错误信息。
第一个选项具有更好的扩展性和更强的容错能力,但更难调试、可视化和协调。
https://softwareengineering.stackexchange.com/questions/433760
复制相似问题