1

내가 microservice 아키텍처에 대해 많이 읽고 있지만 달성하는 방법을 이해 해달라고 당신이 좀 도와 수 있기를 바랍니다 한 가지 ...Microservice 아키텍처 의존

이 내가 웹 API-가 있다고 가정하자 OrderMicroservice가 처리해야하는 주.을 수신하는 엔드 포인트. 주문을 받으면 인벤토리를 업데이트해야합니다. OrderMS가 구독자 (예 : Nats를 사용하는 게시/하위)에 이벤트를 게시하고 InventoryMS가 현재 이벤트/메시지를 구독하기 때문에 인벤토리를 업데이트합니다 .... 느슨하게하고 싶습니다. 결합 된 아키텍처를 사용하고 주어진 정보에 관심이있는 모듈/MS에 대한 비동기 호출을 사용합니다.

InventoryMS 인스턴스가 1 개인 경우 주어진 시나리오는 완벽하게 정상적으로 작동하지만 인벤토리 관리 시스템을 수평 적으로 확장하면 인벤토리 관리 시스템이 5 개인데 모두 Inventory.change.event에 가입하고 업데이트를 시도합니다 재고?

수평 적으로 scalled MS와 같은 시나리오에서 어떤 종류의 아키텍처 또는 메시지 패턴을 사용해야합니까? MS가 서로 의존적 일 때 느슨한 결합 아키텍처를 가질 수 있습니까? 한 가지 방법은 회로 차단기 패턴을 사용하여 REST 호출을 통해 내부적으로 통신을 수행하는 것입니다. 그런 다음 몇 가지 현명함 (회로 차단기)을 사용하여 MS의 모노 라이트를 구축한다고 느낍니다 ...

감사합니다.

답변

0

지점 간 메시징 모델을 사용하고 한 명의 소비자 만 메시지를 수신합니다. 게시/하위 모델에서는 모든 구독자에게 알림이 전송됩니다.
예 : ActiveMQ.

+0

확인 다른 서비스의 인스턴스! – user3154653

+0

Java를 사용하는 경우 AvtiveMQ를 예로 확인하십시오. – dstar55

4

여전히 pub/sub 모델을 사용할 수 있지만 하나만 메시지를 받도록 여러 인스턴스를 설정해야합니다. 예를 들어 RabbitMQ와 같은 AMQP 시스템에서 교환에 이벤트를 게시하려는 경우, 해당 내용은 게시/하위 메커니즘

에 따라 다릅니다. 소비자 서비스는 해당 교환에 대기열을 보내고 동일한 서비스의 모든 인스턴스는 동일한 대기열에서 읽습니다. 따라서 하나만 주어진 메시지를 처리 ​​할 수 ​​있습니다.

또 다른 예로는 Kafka가 있습니다. 동일한 서비스는 동일한 consumer group을 사용합니다. 따라서 각 구독 서비스의 인스턴스 하나만 메시지를 수신합니다.

다른 게시/서브 시스템도 비슷한 솔루션을 제공합니다.

포인트는 훌륭한 솔루션이 커플처럼 아닌 특정 인스턴스를 가리 키도록 내가, 감사 나체 :)을 사용하여 메시지를 가리 키도록 지점을 조사해야합니다

+0

ActiveMQ의 대상 지점 (대상 : 대기열)은 소비자 측에서 라운드 로빈 배포를 사용하므로 더 많은 소비자가있는 경우 특정 인스턴스에 결합되지 않습니다. 그러나 당신은 Pub/Sub 모델로도 달성 할 수있는 것과 똑같습니다. – dstar55