2017-11-23 43 views

답변

2

아니요. AMQP는 비동기 프로토콜입니다. 배달을 보장하려면 Publisher Confirms and Returns을 사용해야하며, 그 경우에도 확인 (또는 반환)이 다른 스레드로 돌아옵니다.

+0

포인터를 가져 주셔서 감사합니다. –

+0

@Gary Russel, 호기심에서 벗어나 트랜잭션 된 채널을 사용하면 커밋시 커밋이 성공하면 메시지가 전달되었는지 확신 할 수 있습니까? 내 이해가 그, 그러나, 실패하면, 전체 롤백 (즉, Exchange가 일부 큐에 메시지를 전달하는 데 성공했지만 모든 큐가 없음)의 보장은 없습니다. 나는 이것을 정확하게 해석하고 있는가? –

+0

일반적으로 댓글에 질문을 추가하는 대신 새로운 질문을하는 것이 가장 좋습니다. 응답은 라우트 할 수없는 메시지와'mandatory'를 사용하더라도'commit'이 성공하고 반환 된 메시지는 (commit 후에) 비동기 적으로 되돌아 온다. 나는 부분적으로 전달되는 행위를 모른다. 그러나 문서에는 "'RabbitMQ에서 tx.commit-ok는 모든 거래 효과가 보임을 나타내며 중개인은 책임을 수락했다. RabbitMQ 기술자가있는 'rabbitmq-users' Google 그룹에서 RabbitMQ 내부 정보에 대해 질문해야합니다. –

2

업데이트 : 이것은 정답이 아닙니다. 당신이 예 다음 발행인 및 RabbitMQ 사이의 유일한 통신을 의미하는 경우 @GaryRussell

의 대답을 참조하십시오. 메시지 저장 및 복제가 RabbitMQ 작업의 일부임을 보장하기 위해 다른 작업을 수행 할 필요는 없습니다.

catchAmqpException 메시지를 보내는 데 문제가있는 경우 기억하십시오.

+0

올바르지 않습니다. AMQP는 비동기입니다. –

+0

@GaryRussell 나는 Sébastien이 게시자와 RabbitMQ 사이의 의사 소통을 의미한다고 생각했습니다. 그러나 그가 가입자를 의미한다면 이것은 올바르지 않습니다. – Zico

+0

아니오; 발행자 측에서도'send()'메서드가 종료 될 때 대상 큐에서 메시지가 보호되었다고 보장 할 수 없습니다. 그의 질문은 '메시지가 RabbitMQ 클러스터에서 전달되고 복제되었는지 확신 할 수 있는가?'이며 대답은 'NO'이다. –