微服务架构依赖

问题描述:

我已经阅读了很多关于微服务架构,但有一两件事,我不知道如何实现,并希望你能帮助我这个...微服务架构依赖

可以说我有一个网络的API - 接收OrderMicroservice负责处理的订单的端点。订单放置时必须更新库存,以便OrderMS将订单发布给订户(例如Nats使用的订单/订单)和InventoryMS将更新库存,因为它订阅了当前的事件/消息....我想要放宽耦合架构,并使用对给定信息感兴趣的模块/ MS的异步调用。

如果您有1个InventoryMS实例,那么给定的方案可以很好地工作,但是如果您已经横向扩展了InventoryMS,会发生什么情况,即有5个InventoryMS实例,并且它们都订阅inventory.change.event并尝试更新库存?

什么样的体系结构或消息模式应该用于像这样的场景,这种情况下,MS可以在MS相互依赖的情况下使用松耦合体系结构? 一种方法是通信内部是通过使用断路器模式的REST-呼叫,但是然后我觉得我用一些智能(断路器)建立MS的monolite ...

感谢您的帮助!

使用点对点消息模型,只有一个消费者会收到消息。在pub/sub模型中,所有订阅者都会收到通知。
ActiveMQ的示例。

+0

好吧,我会对此展开调查点使用纳茨:),这要归功于点消息的情况下! – user3154653

+0

如果您使用Java,请检查AvtiveMQ,例如 – dstar55

您仍然可以使用发布/订阅模型,但您需要设置多个实例,以便只有一个会收到消息。具体取决于pubs/sub机制

例如在AMQP系统(如RabbitMQ)中,您将在交易所上发布事件。消费者服务将对该交换进行排队,并且相同服务的所有实例将从同一队列中读取(因此只有一个会处理任何给定的消息)

另一个例子是Kafka-在Kafka中的所有实例相同的服务将使用相同的consumer group - 因此,每个订阅服务只有一个实例会收到消息

其他发布/订阅系统也会有类似的解决方案。

点对点具体实例是不是一个很好的解决方案,因为它会在几个不同的服务

+0

ActiveMQ中的点对点(目标:队列)正在消费者端使用循环分配,因此如果您有更多消费者,它们将不会与特定实例耦合。但是你也可以用pub/sub模型来实现同样的事情。 – dstar55