rabbitmq 메시지 확인 메커니즘(사물+confim)

3617 단어 rabbitmq
rabbitmq에서 우리는 지속적인 데이터를 통해rabbitmq 서버의 이상한 데이터 분실 문제를 해결할 수 있습니다.
문제: 생산자가 메시지를 보낸 후에 메시지가rabbitmq 서버에 도착했습니까?
두 가지 방식: AMQP는 사물 메커니즘을 실현했다.confirm 모드

사무 메커니즘


txselect txCommit txRollback txselect: 사용자가 현재 채널을transation 모드로 설정합니다.xxcommit: 사무를 제출합니다.txRollback: 트랜잭션 롤백.
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String msgString ="HELLO TX MESSAGE";
try{
	channel.txSelect():
	channel.basicPublish(EXCHANGE_NAME,ROUTING_NAME,null,msgString.getBates());
	channel.txCommit();
	}catch(Exception e){
	channel.txRollback();
}

Cnfirm 모드


생산단 confim 모델의 실현 원리:
생산자는 채널을confim모드로 설정합니다. 채널이confim모드에 들어가면 이 채널에 발표된 모든 메시지는 유일한 ID(1부터)로 파견됩니다. 메시지가 모든 일치하는 대기열에 배달되면 브로커는 생산자에게 확인(메시지의 유일한 ID 포함)을 보냅니다. 이로써 생산자는 메시지가 목적의 대기열에 정확하게 도착했다는 것을 알 수 있습니다. 만약에 메시지와 대기열이 오래 지속될 수 있다면,그러면 확인 메시지가 디스크에 기록되어 전송됩니다.브로커가 생산자에게 보내는 확인 메시지에deliver-tag역은 확인 메시지의 시퀀스 번호를 포함하고 있으며, 브로커는basic로 설정할 수 있습니다.ask의multiple역은 이 시퀀스 번호 이전의 모든 메시지가 처리되었음을 나타냅니다.
confim 모드의 가장 큰 장점은 비동기적이라는 것이다.
confim 모드 열기
channel.confimSelect();

프로그래밍 모드:
  • 일반적으로waitForConfirms()를 보냅니다
  • 대량의 waitForConfirms
  • 비동기confirm 확인 리셋 제공..
  • 좋은 웹페이지 즐겨찾기