>  기사  >  백엔드 개발  >  Rabbitmq는 소비자 실행이 성공했는지 어떻게 알 수 있나요?

Rabbitmq는 소비자 실행이 성공했는지 어떻게 알 수 있나요?

WBOY
WBOY원래의
2016-09-12 17:44:441982검색

시나리오: 주문하고 재고를 공제합니다.
주문하는 작업을 대기열에 넣고 하나씩 처리하여 재고 차감 시 실수가 없도록 하는 것이 제 생각입니다.
생산자이자 소비자입니다
사용자가 UI에서 "주문 제출"을 클릭하면 작업이 대기열에 배치되고 대기열이 작업 결과를 처리할 때까지 기다리며 페이지는 다음을 기반으로 이동합니다. 결과(성공 또는 실패)

하지만 문제가 있습니다. 대기열이 처리된 후 결과를 생산자에게 어떻게 알릴 수 있을까요?
RabbitMQ를 예로 들어보겠습니다. 코드를 제공할 수 있는 사람이 있나요?

답글 내용:

시나리오: 주문하고 재고를 공제합니다.
주문하는 작업을 대기열에 넣고 하나씩 처리하여 재고 차감 시 실수가 없도록 하는 것이 제 생각입니다.
생산자이자 소비자입니다
사용자가 UI에서 "주문 제출"을 클릭하면 작업이 대기열에 배치되고 대기열이 작업 결과를 처리할 때까지 기다리며 페이지는 다음을 기반으로 이동합니다. 결과(성공 또는 실패)

하지만 문제가 있습니다. 대기열이 처리된 후 결과를 생산자에게 어떻게 알릴 수 있을까요?
RabbitMQ를 예로 들어보겠습니다. 코드를 제공할 수 있는 사람이 있나요?

quene은 메시지 도착 여부, 특히 귀하의 비즈니스가 성공적으로 수행되었는지 여부만 보장할 수 있습니다. 이 메시지 대기열은 보장되지 않습니다.

생산자는 메시지를 게시한 후 대기열 b와 같은 다른 반환 메시지 대기열을 수신합니다.
소비자가 소비를 마친 후 결과 메시지가 대기열 b로 푸시됩니다.
이렇게 하면 원래 제작자가 반환된 결과를 얻을 수 있습니다.

RabbitMQ에서 RPC를 구현하는 메커니즘은 다음과 같습니다.

  • 클라이언트가 요청(메시지)을 보낼 때 메시지 속성(MessageProperties, 14개 속성은 AMQP 프로토콜에 정의되어 있음)에 두 개의 값인 replyTo(큐)를 설정합니다. 이러한 속성은 message) 이름, 처리가 완료된 후 이 대기열에 나에게 알리는 메시지를 보내도록 서버에 지시하는 데 사용됨) 및 CorrelationId(이 요청의 식별 번호. 서버는 처리가 완료된 후 이 속성을 반환해야 합니다. 클라이언트는 이 ID를 기반으로 어떤 요청이 성공적으로 실행되었는지 또는 실패했는지 이해하세요.)

  • 서버가 메시지를 받아 처리합니다

  • 서버가 메시지를 처리한 후 CorrelationId 속성

  • 을 사용하여 replyTo로 지정된 대기열에 대한 응답 메시지를 생성합니다.
  • 클라이언트는 replyTo로 지정된 Queue에 이전에 구독한 적이 있으며 서버로부터 응답 메시지를 받은 후 CorrelationId 속성을 기반으로 어떤 요청이 실행되었는지 분석하고 실행 결과를 기반으로 후속 비즈니스 처리를 수행합니다.

생산자는 다른 replyTo 대기열을 수신하고 해당 응답 메시지를 얻어 후속 작업을 트리거한다는 점을 지적합니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.