시나리오: 주문하고 재고를 공제합니다.
주문하는 작업을 대기열에 넣고 하나씩 처리하여 재고 차감 시 실수가 없도록 하는 것이 제 생각입니다.
생산자이자 소비자입니다
사용자가 UI에서 "주문 제출"을 클릭하면 작업이 대기열에 배치되고 대기열이 작업 결과를 처리할 때까지 기다리며 페이지는 다음을 기반으로 이동합니다. 결과(성공 또는 실패)
하지만 문제가 있습니다. 대기열이 처리된 후 결과를 생산자에게 어떻게 알릴 수 있을까요?
RabbitMQ를 예로 들어보겠습니다. 코드를 제공할 수 있는 사람이 있나요?
시나리오: 주문하고 재고를 공제합니다.
주문하는 작업을 대기열에 넣고 하나씩 처리하여 재고 차감 시 실수가 없도록 하는 것이 제 생각입니다.
생산자이자 소비자입니다
사용자가 UI에서 "주문 제출"을 클릭하면 작업이 대기열에 배치되고 대기열이 작업 결과를 처리할 때까지 기다리며 페이지는 다음을 기반으로 이동합니다. 결과(성공 또는 실패)
하지만 문제가 있습니다. 대기열이 처리된 후 결과를 생산자에게 어떻게 알릴 수 있을까요?
RabbitMQ를 예로 들어보겠습니다. 코드를 제공할 수 있는 사람이 있나요?
quene
은 메시지 도착 여부, 특히 귀하의 비즈니스가 성공적으로 수행되었는지 여부만 보장할 수 있습니다. 이 메시지 대기열은 보장되지 않습니다.
생산자는 메시지를 게시한 후 대기열 b와 같은 다른 반환 메시지 대기열을 수신합니다.
소비자가 소비를 마친 후 결과 메시지가 대기열 b로 푸시됩니다.
이렇게 하면 원래 제작자가 반환된 결과를 얻을 수 있습니다.
RabbitMQ에서 RPC를 구현하는 메커니즘은 다음과 같습니다.
클라이언트가 요청(메시지)을 보낼 때 메시지 속성(MessageProperties, 14개 속성은 AMQP 프로토콜에 정의되어 있음)에 두 개의 값인 replyTo(큐)를 설정합니다. 이러한 속성은 message) 이름, 처리가 완료된 후 이 대기열에 나에게 알리는 메시지를 보내도록 서버에 지시하는 데 사용됨) 및 CorrelationId(이 요청의 식별 번호. 서버는 처리가 완료된 후 이 속성을 반환해야 합니다. 클라이언트는 이 ID를 기반으로 어떤 요청이 성공적으로 실행되었는지 또는 실패했는지 이해하세요.)
서버가 메시지를 받아 처리합니다
서버가 메시지를 처리한 후 CorrelationId 속성
클라이언트는 replyTo로 지정된 Queue에 이전에 구독한 적이 있으며 서버로부터 응답 메시지를 받은 후 CorrelationId 속성을 기반으로 어떤 요청이 실행되었는지 분석하고 실행 결과를 기반으로 후속 비즈니스 처리를 수행합니다.
생산자는 다른 replyTo 대기열을 수신하고 해당 응답 메시지를 얻어 후속 작업을 트리거한다는 점을 지적합니다.