나는 메시지 A
이 많은 메시지를 생성하기로되어있는 RabbitMQ 메시지 구조를 가지고 있는데, 이것들을 B
과 C
이라고 부르 자. 메시지 A
은 작업자 프로세스에서 수신 한 다음 처리하고 메시지 B
및 C
을 생성합니다.RabbitMQ 후속 메시지의 원 자성
가상적인 워크 플로우 프로세스는 다음과 같다 :
- 이
ack=False
- 시작 트랜잭션
- 실행하는 코드
- 생성 메시지
B
- 생성 메시지
C
있는 메시지
- 보내기
- 완료 메시지 어떤 경우 작업자 프로세스가 메시지
A
의 처리 중에 사망하거나 동안 아직 트랜잭션을 완료하지 않은됩니다에서 거래
A
수신
에 대한- 나는 RabbitMQ과 같이 메시지 A
를 치료하고 싶습니다 배달하지 않은 다음 다시 대기열에 넣으십시오.
RabbitMQ는 고 가용성 구성에서 실행됩니다.
는또한, RabbitMQ도 예를 들어, 단 하나의 큐를 포함하는 거래의 경우에는 자성 보증을 제공하지 않습니다 :
왜 질문은 진술의 RabbitMQ 문서 here을 취소하려고 tx.commit 중에 오류가 발생하면 브로커를 다시 시작한 후 트랜잭션 게시의 하위 집합이 대기열에 표시 될 수 있습니다.
- 내가 RabbitMQ 또는 시장에 다른 대기 소프트웨어의 맥락에서 원하는 동작을 달성 할 수있는 방법이 있습니까?
- RabbitMQ를 사용하여 여러 대기열에서 사용할 수있는 방법이 있습니까?
저는 이것을 구현하는 방법을 정확히 알고 있습니다. SQL 지원 솔루션은 그것에 대한 순진한 해결책이 될 것입니다. 제 문제는 Postgres/MySQL보다는 RabbitMQ 성능 레벨에서 효율적으로 그렇게 할 수있는 적절한 소프트웨어를 찾는 것입니다. –