2011-12-11 2 views
6

RabbitTemplate 클래스를 사용하여 spring amqp로 RabbitMQ 큐에 쓰고 있습니다. convertAndSend 메서드를 사용하여 메시지를 큐에 보냅니다. 이는 정상적인 상황에서는 잘 작동하지만 대기열이 없으면 자동으로 실패하는 것 같습니다. 예외가 발생하지 않고 오류/디버그 메시지가 로거에 기록되지 않습니다.내 메시지가 spring amqp와 함께 성공적으로 전송되었음을 어떻게 알 수 있습니까?

메시지 배달 여부를 확인하는 가장 좋은 방법은 무엇입니까?

다음은 현재 코드에서 수행중인 작업의 예입니다.

RabbitTemplate template = new RabbitTemplate(factory); 
template.setQueue(queueName); 
template.setRoutingKey(queueName); 
template.convertAndSend(message); 
+0

메시지가 기록되지 않는다는 것이 확실합니까? 중개인과 함께 단발 시험을 시도 했습니까? – artbristol

+0

브로커가 다운 된 경우 자동 응답이 잘못되었습니다. 브로커가 다운 된 경우 실제로 UnknownHostException을 수신합니다. 나는 그 질문을 갱신했다. 즉, 대기열이 없으면 여전히 예외 또는 오류 메시지가 표시되지 않습니다. –

+0

메시지를 보내는 곳에서 코드 스 니펫을 게시 할 수 있습니까? – artbristol

답변

2

그것은 RabbitMQ 클라이언트가 메시지를 받아 그 안에 바인딩에는 큐가없는 브로커에 메시지를 송신 할 오류가 아니다. RabbitMQ는 자동으로 삭제하고 클라이언트는 더 현명하지 않습니다. 메시지에 관심이있는 대기열이 없다면 브로커는 다른 많은 옵션을 사용할 수 없습니다.

즉, mandatory 플래그를 설정하여 메시지가 자동으로 삭제되는 경우 RabbitMQ를 불평하도록 만들 수 있습니다. Spring AMQP 인터페이스가이를 지원하는지는 모르지만 RabbitMQ Java 클라이언트 라이브러리에서 확실히 사용할 수 있습니다.

+0

고마워, 나는 그것에 대해 조사 할 것이다. 나는 내일 그것에 도착하려고 노력할 것이다, 우리는 꽤 바쁘다. –

+0

필수 플래그를 설정하는 방법이 표시되지 않습니다. 내가 사용하고있는 spring-amqp 객체들 중 어느 것도 그 설정을 갖고있는 것 같지 않습니다. –

+0

내 문제는 메시지가 교환기에 도착했기 때문에 배달 된 것으로 간주된다고 생각합니다. 메시지는 존재하지 않기 때문에 대기열로 라우팅되지 않습니다. 토끼에서 메시지가 손실되지 않도록 설정해야하는 구성이있을 수 있습니다. –

1

mandatory을 사용할 수 있으며 게시자가 반환 할 수 있습니다 (배달 할 수없는 메시지의 경우).