>  기사  >  Java  >  Spring과 AMQP를 사용하여 Java에서 메시지 보내기 및 받기(2부)

Spring과 AMQP를 사용하여 Java에서 메시지 보내기 및 받기(2부)

怪我咯
怪我咯원래의
2017-06-25 10:02:272074검색

이전 글에서는 RabbitMQ를 사용하여 메시지를 보내는 방법에 대해 설명했고, 이번 글에서는 메시지 수신에 대해 설명하겠습니다.
기존 JMS에서는 큐에서 정보를 얻는 두 가지 방법이 있습니다. JmsTemplate을 사용하는 동기식 방법과 메시지 기반 pojo를 사용하는 비동기식 방법입니다. Spring AMQP는 또한 AMQP를 통해 전송된 메시지를 얻는 유사한 방법을 제공합니다.

RabbitTemplate을 사용하여 메시지 수신

RabbitTemplate에서 제공하는 정보를 받는 가장 간단한 방법은 receive() 메서드이며, 이를 통해 대기열에서 메시지 개체를 가져올 수 있습니다.

Message message = rabbit.receive("spittle.test.queue");

또는 구성을 통해 가져올 수도 있습니다. 메시지의 기본 대기열은 템플릿을 구성할 때 대기열 속성을 설정하여 달성됩니다:

<template id="rabbitTemplate" 
    connection-factory="connectionFactory"exchange="spittle.test.exchange" 
    routing-key="spittle.test" 
    queue="spittle.test.queue" />

이 경우 receive() 메서드를 호출하면 매개변수를 설정하지 않고 기본 대기열에서 메시지를 가져올 수 있습니다:

Message message = rabbit.receive( );

Message 객체를 얻은 후에는 일반적으로 body 속성의 바이트 배열을 원하는 객체로 변환해야 합니다. 보낼 때 도메인 객체를 Message로 변환하는 것과 마찬가지로 수신된 메시지를 변환하는 것도 번거롭습니다. 여기서 대안으로 RabbitTemplate의 receiveAndConvert() 메소드 사용을 고려할 수 있습니다.

Spittle spittle = (Spittle) rabbit.receiveAndConvert("spittle.test.queue");

receiveAndConvert() 메소드는 sendAndConvert() 메소드와 동일한 메시지 변환기를 사용하여 메시지 객체를 원래 유형으로 변환합니다.
receive() 및 receiveAndConvert() 메서드를 호출하면 즉시 반환됩니다. 대기열에 대기 중인 메시지가 없으면 null이 발생합니다. 이때 일반적으로 프로그래머는 대기열 모니터링을 구현하기 위해 폴링 및 필요한 스레드 자체를 관리해야 합니다. 동기적으로 폴링하고 매번 메시지가 도착할 때까지 기다리지 않으려면 Spring AMQP에서 제공하는 메시지 기반 pojo를 사용하여 메시지를 수신하는 방법을 살펴보겠습니다.

메시지 기반 pojo를 사용하여 메시지 수신

메시지 기반 pojo에서 Spittle 객체를 비동기적으로 사용하려면 먼저 다음 SpittleTestHandler가 이 역할을 수행해야 합니다.

public class SpittleTestHandler {public void handleSpittleTest (Spittle spittle) {
        ...
    }
}

실제로는 다음과 같습니다. , 이 클래스는 AMQP에 의존하지 않으며 어떤 메커니즘을 통과하더라도 Spittle 객체를 처리할 수 있습니다.
여기서 Spring 애플리케이션 컨텍스트에서 SpittleTestHandler를 빈으로 선언해야 합니다.

<bean id="spittleListener"class="com.***.spittr.test.SpittleTestHandler">

마지막으로 메시지가 도착하면 SpittleTestHandler를 호출할 수 있습니다.

<listener-container connection-factory="connectionFactory"><listener ref="spittleListener" 
          method="handleSpittleTest"  queue-names="spittle.test.queue" /></listener-container>

위의 요소와 요소는 모두 토끼 네임스페이스에서 왔습니다. 그리고 queue-names 속성을 통해 모니터링할 큐를 지정합니다. 여기서는 모니터링할 큐를 하나만 설정합니다. 여러 개의 큐를 설정하려면 쉼표로 구분합니다. 이 시점에서 메시지 수신이 완료되면 해당 메소드로 해당 처리를 수행할 수 있습니다.

위 내용은 Spring과 AMQP를 사용하여 Java에서 메시지 보내기 및 받기(2부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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