Hello World

2020. 4. 19. 00:42Spring Micro Services/RabbitMQ

반응형

Constants.java
0.00MB
Recv.java
0.00MB
Send.java
0.00MB
amqp-client-5.7.1.jar
0.58MB
slf4j-api-1.7.26.jar
0.04MB
slf4j-simple-1.7.26.jar
0.01MB

RabbitMQ는 메세지 브로커 이다. 쉽게 이해하기 위해서 우체국으로 생각할 수 있다. 원하는 사람에게 메세지를 전달하기 위해 메세지를 작성하고 우체국 또는 우편함에 우편물을 넣으면 우리가 원하는 사람에게 메세지가 전달 될 것이다.

 

아래 그림은 우리가 작성 할 예제 프로그램에 대한 흐름이다. PRODCUER는 메세지를 보내는 사람이 될 것이고 우리가 전달할 메세지는 Broker인 RabbitMQ의 Queue에 메세지가 저장되고 Consumer에게 메세지가 전달 될 것이다.

 

프로젝트생성

기본적인 자바 프로젝트 생성한다. 프로젝트 구조는 아래와 같다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PRODUCER

메세지를 전송하기 위한 Send.java 프로그램을 작성한다.

package com.rabbitmq.tutorials.chap01;

import java.nio.charset.StandardCharsets;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Send {
	public static void main(String[] args) throws Exception {
	
		System.out.println(Constants.HEADER);
		String rabbitmqHost = "localhost";
		if (args.length > 0) 
			rabbitmqHost = args[0];
		
		ConnectionFactory factory = new ConnectionFactory();
		factory.setHost(rabbitmqHost);
		
		try {
			// 서버연결
			Connection connection = factory.newConnection();
			
			// 채널생성	
			Channel channel = connection.createChannel();
			
			// QUEUE 생성
			boolean isDurable = true							;
			boolean isExclusive = false;
			boolean isAutoDelete = false;
			
			channel.queueDeclare(Constants.queue, isDurable, isExclusive, isAutoDelete, null);
			
			// 메세지 전송
			String message = "Hello World!!!!";
			channel.basicPublish("", Constants.queue, null, message.getBytes(StandardCharsets.UTF_8));
			
			System.out.println(" [x] Sent '" + message + "'");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
}

durable 속성을 true로 설정할 경우 Broker가 재시작되도 Queue는 유지된다는 의미이다. 하지만 주의할 점은 속성을 수정한 후 메세지를 전송할시 403 에러가 발생한다는 점이다. 이런 경우 Queue를 삭제하고 재생성 해야 하므로 설정시 주의가 필요한다.

 

CONSUMER

메세지를 수신하기 위한 Recv.java 프로그램을 작성한다.

package com.rabbitmq.tutorials.chap01;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;

public class Recv {
	
	public static void main(String[] args) throws Exception {
		System.out.println(Constants.HEADER);
		String rabbitmqHost = "localhost";
		if (args.length > 0) 
			rabbitmqHost = args[0];
		
		ConnectionFactory factory = new ConnectionFactory();
		factory.setHost(rabbitmqHost);

		// 서버연결
		Connection connection = factory.newConnection();
		
		// 채널생성
		Channel channel = connection.createChannel();
		
		// QUEUE 생성
		boolean isDurable = true;
		boolean isExclusive = false;
		boolean isAutoDelete = false;
		
		channel.queueDeclare(Constants.queue, isDurable, isExclusive, isAutoDelete, null);
		System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
		
		// 메세지수신
		DeliverCallback deliverCallback = (consumerTag, delivery) -> {
			String message = new String(delivery.getBody(), "UTF-8");
			System.out.println(" [x] Received '" + message + "'");
		};
		channel.basicConsume(Constants.queue, true, deliverCallback, consumerTag -> { });

	}

}

 

프로그램 실행

PRODUCER 실행

Send.java를 실행하면 Broker의 hello Queue로 메세지를 전송한다.

    

BROKER 실행

Consumer 실행전 PODUCER에서 hello Queue에 전송한 메세지를 확인해본다.

 

1. Queue 이름 확인

목록에 보면 Queue Name에 hello라는 이름을 확인 할 수 있다.

 

2. 메세지 확인

목록에서 Queue Name을 선택하게 되면 아래와 같이 상세 내용에 Queue에 전송된 메세지를 확인 할 수 있다.

 

CONSUMER 실행

Recv.java를 실행하면 hello Queue에 적재된 메세지를 수신하는 것을 확인 할 수 있다.

예제 코드는 RabbitMQ Tutorial의 Get Started에 있는 코드를 바탕으로 작성된 것이다.

 

 

※ 참고사이트

RabbitMQ Tutorial : https://www.rabbitmq.com/tutorials/tutorial-one-java.html

반응형

'Spring Micro Services > RabbitMQ' 카테고리의 다른 글

Topic  (0) 2020.04.19
Routing  (0) 2020.04.19
Publish/Subscribe  (0) 2020.04.19
Work Queues  (0) 2020.04.19
Quick Start  (0) 2020.04.17