반응형
1. 개요
- 앞에글 https://arckwon.tistory.com/entry/Linux-%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90-RabbitMQ-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-1 에서 리눅스 서버에 RabbitMQ를 설치하였다.
- 이번 포스팅에서는 Spring Boot와 연동하여 간단한 시뮬레이션 프로그램을 구현한다.
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 부분이 출력된다.
반응형
'개발 > mqtt' 카테고리의 다른 글
[RabbitMQ] linux : ubuntu : rabbitmq 설치, 방화벽 (0) | 2023.08.09 |
---|---|
[mosquitto] linux : mqtt : mosquitto 설치, 테스트 (0) | 2023.08.09 |