我已经阅读了很多关于微服务架构的内容,但有一件事我不明白如何实现并希望你可以帮助我...
假设我有一个web-api-endpoint,它接收OrderMicroservice负责处理的命令。当订单被放置时,必须更新库存,以便OrderMS向订户发布事件(使用例如Nats的pub / sub),而InventoryMS将更新库存,因为它订阅当前事件/消息....我想要松散耦合架构并使用asynch调用对给定信息感兴趣的模块/ MS。
如果您有1个InventoryMS实例,给定场景将完全正常但如果您横向扩展了InventoryMS会发生什么情况,即有5个InventoryMS实例并且所有这些实例都订阅inventory.change.event并将尝试更新库存?
我应该使用什么样的架构或消息模式用于这样的场景,并使用水平放大的MS,这样当MS彼此依赖时,我可以拥有松散的耦合架构? 一种方式是内部通信是通过使用断路器模式的REST调用进行的,但后来我觉得我构建了一个具有一定智能的断路器(断路器)......
感谢您的帮助!
答案 0 :(得分:4)
您仍然可以使用pub / sub模型,但是您需要设置多个实例,以便只有一个实例会收到消息。具体取决于发布/订阅机制
例如,在AMQP系统(如RabbitMQ)中,您可以在交易所上发布事件。消费者服务将为该交换提供队列,并且同一服务的所有实例将从同一队列中读取(因此只有一个会处理任何给定的消息)另一个例子是Kafka - 在Kafka中,同一服务的所有实例都使用相同的consumer group - 所以,同样,每个订阅服务只有一个实例会收到消息
其他发布/订阅系统会有类似的解决方案。
指向特定实例并不是一个很好的解决方案,因为它会耦合不同服务的实例
答案 1 :(得分:0)
使用点对点消息传递模型,只有一个消费者会收到消息。在pub / sub模型中,将通知所有订阅者 示例ActiveMQ。