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

时间:2017-07-31 16:15:34

标签: architecture message-queue microservices

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

让第三方访问将消息放入队列或者我是否应该像队列中的RESTful微服务一样包装,这是一种良好的做法吗?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

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

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

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