본문 바로가기
개발/mqtt

Linux 우분투에 RabbitMQ + Spring boot연동 (2)

by 아크투어 2023. 3. 21.
반응형

1. 개요

 

2. 사용자추가

  • http://접속아이피:15672/ 로 접속하여 아래탭에서 계정을 생성한다.
  • 계정정보를 입력하고 Add user를 클릭한다.

 

 

3. 생성된 사용자의 가상호스트 만들기

  • 로그아웃버튼 아래부분 Virtual Hosts를 클릭한다.

  • 아래처럼 해당계정이 사용할 가상호스트를 생성할수있다.

 

  • 생성후 계정을 클릭하여 계정과 가상호스트 정보를 연동한다.
  • 1번을 클릭한다.

 

  • 생성한 가상호스트  선택하고 Set permission 버튼클릭(권한부여)
  • Permissions와 Topic permissions 두곳 작성후 Set버튼클릭

 

  • 완료화면

 

 

4. 큐생성하기

  • 온도센서가 부착된 IoT장비가 존재한다는 가정하에 큐이름을 sensor로 한다.
  • virtual host : 생성한호스트선택
  • Type : Classic
  • Name : sensor
  • 이외 아래항목 default로 하고 Add queue

 

 

5. Spring Boot 프로젝트 생성

  • Spring Starter Project에서 아래와 같이 생성해본다.
  • Spring boot 버전은 2.7.9 이다. (2버전대)

 

  • Next > Finish 버튼 클릭하여 Spring Boot 프로젝트를 생성한다.
  • 아래는 최종 작성된 샘플소스 이다.

 

 

  • build.gradle 파일 mqtt관련 라이브러리 추가
implementation group: 'org.springframework.boot', name:'spring-boot-starter-amqp', version: '2.2.8.RELEASE'

 

  • json파싱 jackson라이브러리 추가
implementation 'com.fasterxml.jackson.core:jackson-core:2.9.8'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.8'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.9.8'

 

  • Sensor 파일추가
package com.mqtt;

import java.io.Serializable;

public class Sensor implements Serializable{

	private static final long serialVersionUID = 8414980101065433792L;

	private String deviceId;

	private Float temperature;
	
	private String saveDate;

	public String getDeviceId() {
		return deviceId;
	}

	public void setDeviceId(String deviceId) {
		this.deviceId = deviceId;
	}

	public Float getTemperature() {
		return temperature;
	}

	public void setTemperature(Float temperature) {
		this.temperature = temperature;
	}

	public String getSaveDate() {
		return saveDate;
	}

	public void setSaveDate(String saveDate) {
		this.saveDate = saveDate;
	}
}

 

  • Subscriber 파일추가
package com.mqtt;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import com.fasterxml.jackson.databind.ObjectMapper;

@Component
public class Subscriber {

	@RabbitListener(queues = "sensor")
	public void sensor(String message) throws Exception {
		
		ObjectMapper objectMapper = new ObjectMapper();
		
		try {
			System.out.println("sensor message : " + message);
			
			Sensor sensor = objectMapper.readValue(message, Sensor.class);
			
			System.out.println("sensor deviceid : " + sensor.getDeviceId());
			System.out.println("sensor temperature : " + sensor.getTemperature());
			System.out.println("sensor savedate : " + sensor.getSaveDate());
			
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

 

  • application.properties 수정
#Server
server.port=7070

#mqtt
spring.rabbitmq.host=MQ서버아이피
spring.rabbitmq.port=5672
spring.rabbitmq.username=아이디
spring.rabbitmq.password=비밀번호
spring.rabbitmq.virtual-host=vhost-arc

 

 

6. 테스트

  • Spring Boot 소스슬 실행하면 아래와 같이 커넥션이 생성된다.

 

  • 큐탭에서 Json형식으로 샘플데이터를 생성한다.
  • 테스트 메시지를 발송하기위해 빨간색 부분을 클릭한다.

 

  • Publish message 에서 테스트 데이터 입력
  • Publish message 버튼클릭
{
    "deviceId": "DEV_00001",
    "temperature": 12,
    "saveDate": "2022-12-01 03:07:17"
}

 

  • Spring Boot 에서의 결과값
  •  소스상 System.out.prinln 부분이 출력된다.

반응형