티스토리 뷰
1. 문제 상황
라즈베리파이와 Spring 서버는 Mqtt로 통신한다.
이때 AWS IoT 라이브러리 또한 사용한다.
근데 왜인지... Connection이 3~4초 단위로 끊긴다...

2. 문제 해결
(1) AWSIotMqttClient 설정 문제?
나와 같은 문제를 겪는 사람을 스택오버플로우에서 찾았다.
차이점은 저 사람은 10분 단위로 끊기고 나는 3초 단위로 끊긴다는 거...
답변에 있는 방법으로 setKeepAliveInterval 속성 등을 수정해보고, setConnectionTimeout 등도 수정해 보았지만 오류는 여전하다...

(2) Client ID 문제?
다른 사이트에 올라온 코드를 보다가 Client ID를 동적으로 생성하는 부분을 보았다.
나는 위 사진처럼 Client ID를 고정된 값으로 두고 있다.
client = new AWSIotMqttClient(MQTT_CLIENT_ENDPOINT,
MQTT_CLIENT_ID + new BigInteger(64, new SecureRandom()).toString(32),
readStore(),
KEYPASS);
GPT
따라서, 여러 디바이스 또는 애플리케이션이 AWS IoT에 동시에 연결되는 경우, 각각 고유한 clientId를 사용해야 합니다. 동일한 디바이스가 여러 번 재연결하는 경우에는 같은 clientId를 사용할 수 있지만, 동시에 여러 연결을 유지하려면 clientId가 고유해야 합니다.
특정 상황에서 필요에 따라 clientId를 동적으로 생성하여 사용할 수도 있습니다. 예를 들어, UUID를 사용하거나 디바이스의 고유 식별자를 기반으로 clientId를 생성할 수 있습니다.
그렇다고 한다! 나는 로컬, 서버 등등에서 동시에 같은 ID를 사용해서 접속을 해왔다.
동적으로 바꿔보자.
@Bean
public AWSIotMqttClient mqttClient() {
// CLient ID 동적 생성
AWSIotMqttClient mqttClient = new AWSIotMqttClient(clientEndpoint, clientId + new BigInteger(64, new SecureRandom()).toString(32), accessKeyId, secretAccessKey);
mqttClient.setConnectionTimeout(30);
mqttClient.setServerAckTimeout(10);
mqttClient.setKeepAliveInterval(0);
return mqttClient;
}

헉 된다!!!! 연결 안정적으로 된다!!! 값도 잘가져온다!!!
몇 주동안 고생했던 문제라 너무 뿌듯하다...
Mqtt 통신에 사용되는 Client ID는 고유한 값이어야 한다!
기억하자!
'Project > 원격진료체온측정' 카테고리의 다른 글
[원격진료체온측정] 3. 아주 간단하게 설명한 WebRTC 동작 원리 (0) | 2024.08.13 |
---|---|
[원격진료체온측정] 2. 이슈 발행을 통한 Git 협업 (feat. 레이블 설정 오류) (0) | 2024.07.02 |
[원격진료체온측정] 1. 문제상황을 기록하고 공유하자 (0) | 2024.07.02 |
- Total
- Today
- Yesterday
- 컴공
- 자바
- 자바 1004번
- 안드로이드
- 스프링부트
- 백준 2108
- BFS
- 백준 1004
- 코딩
- 그리디 알고리즘
- 프로그래밍
- 자바 9375
- 백준
- 코틀린
- bcrypaswordencoder
- 컴퓨터학과
- 동덕여대
- 개발
- 알고리즘
- 백준9375번
- 스프링 강의
- 동덕여대 컴퓨터학과
- 리트코드 1768 해석
- 생활코딩
- 웹
- RDD
- 스파크
- 리트코드 1768
- 컴과
- 아이엘츠
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |