이전 글에서는 RabbitMQ를 사용하여 메시지를 보내는 방법에 대해 설명했고, 이번 글에서는 메시지 수신에 대해 설명하겠습니다.
기존 JMS에서는 큐에서 정보를 얻는 두 가지 방법이 있습니다. JmsTemplate을 사용하는 동기식 방법과 메시지 기반 pojo를 사용하는 비동기식 방법입니다. Spring AMQP는 또한 AMQP를 통해 전송된 메시지를 얻는 유사한 방법을 제공합니다.
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에서 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>
위의
위 내용은 Spring과 AMQP를 사용하여 Java에서 메시지 보내기 및 받기(2부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!