微服务是否应该将消息队列包含在第三方供应商中?

问题描述 投票:2回答:2

我有第三方供应商需要向我们发送消息。我正在考虑让他们把这些消息放到消息队列中。因为我不希望需要对队列采取行动的微服务被流量淹没。

为第三方提供将消息放入队列的访问权限,还是应该像RESTful微服务一样包裹在队列中,这是一种良好的做法吗?

architecture message-queue microservices
2个回答
4
投票

我会考虑在服务中包装队列。由于它是第三方,如果/何时需要改变,你可能无法控制。例如,如果您需要添加安全性,或者需要引入限制。

如果它纯粹是内部的,那么额外的抽象可能不值得,但外部暴露的资源可能需要更多的控制


2
投票

我肯定会像你建议的那样做。比技术问题(可扩展性,容错等)更重要的是在您和您的供应商之间建立一种有益的动态。

如果直接暴露了排队的端点,那么您可以有效地将合同控制权交给消息生产者。作为消息的生产者,他们实际上能够将他们想要的任何消息注入队列。

从合同的角度来看,排队的数据交换格式非常难以确定。除了有效负载之外,还有其他问题,例如寻址,标头,编码,重试和分组语义。相反,使用http,可以使用诸如swagger之类的端点定义约定来描述整个合同而不会产生歧义。

重要的是,通过公开同步服务,您可以保留对合同的控制权。除了控制合同(以及因此对话的格式)之外,您还可以使用有意义且有用的响应来实施限制,严格验证等,所有这些在异步场景中都会更加困难。

这是一个重要的区别,因为生产者 - 消费者关系中的权力平衡与服务 - 消费者关系中的权力平衡非常不同。您会发现这可以简化您与供应商未来的交易。

© www.soinside.com 2019 - 2024. All rights reserved.