我们有一个小型微服务,其唯一目的是通过队列接收消息并将其发送到外部系统。这些消息可以来自任意数量的其他服务,并且该服务不知道消息的内容。外部系统可以接受或拒绝该消息。我看到了许多处理外部系统响应的选项:
我倾向于选择第三个选项来分离关注点,并且不会因为错误流程而干扰愉快的流程,但希望得到反馈,为什么这可能是一个糟糕的选择。
是否有任何可用资源记录此类问题的最佳实践解决方案?
(我知道上面可以重写为从队列读取消息并将消息存储在数据库中的服务,异步将消息发送到外部系统并将响应存储在数据库中,发布一个事件以指示消息已处理并且开发一个 API 以允许从数据库检索响应,但这需要额外的数据库、更多的工作和更多的资源,在我看来这有点过头了)
我也会选择第三种选择,并出于几个原因将您的担忧分开。
值得注意的是,消息代理并不像数据库那样用于长期数据存储。如果您打算将响应详细信息保留一段时间,您可能希望在某个时候将它们卸载到数据库中。
拥有单独的错误队列/路径是一种将错误扔回调用者的替代方案(以某种方式)......面向铁路的编程。