반응형
사용자 둘이서 특정 목적지까지 내기 하는 서비스를 만들고 있습니다.
Kafka, rabbitMQ를 사용해서 이벤트 예약처리하는 방법도 찾아봤지만 간단하게 Quartz 스케줄러를 이용해서 처리했습니다.
1분마다 스켈줄을 처리하기에는 사이드 프로젝트인 만큼 부담이 되고 레퍼런스를 찾아보니 그린카가 10분단위로 예약을 받는것을 보고 변경했습니다.
@EnableAsync ➡️ 이벤트를 비동기로 처리하기 위함
@EnableScheduling ➡️ 스케줄러를 통해서 10분마다 데이터를 처리하기 위함
스케줄 처리 참고
쿼츠 스케줄러를 이용해서 매일 10분마다 쉽게 처리할 수 있게 되었습니다.
ApplicationEventPublishe를 이용해서 이벤트로 넘겨줘서 비동기처리 했습니다.
이벤트 사용법에 대해서 잘 정리되어 있어서 쉽게 적용할 수 있었습니다.
Redis의 Geofencing
사용자의 위치 정보와 목적지의 거리 차이를 실시간으로 제공하는 API
이벤트로 들어온 각각의 내기를 redis의 Geofencing기능을 활용하기 위해서 naming convention을 지켜서 key로 저장했습니다.
- 진행중인 내기가 있다면 다른 내기는 참여할 수 없기 때문에 사용자id:목적지 이름으로 저장했습니다.
값이 잘 들어오는지 확인하기 위해서 dataBase에 시작시간을 5분 단위로 만들었습니다. (쿼츠 스케줄러 5분으로 변경)
5시5분이 되니 쿼리와 잠깐 System.out.println으로 찍어본 데이터가 출력되었습니다.
- 쿼리 한번에 처리하려고 하니까 쿼리가 좀 긴거 같습니다 ㅜㅜ
데이터가 3개가 잘 찍힌거 같은데... redis-cli를 통해서 키를 조회해보니,,, 비어있었습니다.
stack trace를 확인해보니 invalid longitude, latitude pair 589.000000,454.000000을 확인할 수 있었습니다.
- 잘못된 경도 위도ㅜㅜ 테스트하려고 아무거나 넣었더니 발생한거 같습니다.
ㅋㅋㅋㅋㅋ ㅜㅜ google map에서 위도, 경도를 통해서 조회해보니
위도 경도를 재대로 넣어주니!! 성공! - redis 설정 클래스에서 RedisConnectionFactory 설정해주면 데이터 볼 수 있다고 합니다.
반응형
'개발' 카테고리의 다른 글
매직넘버, 리터럴 어디까지 상수 처리해야 돼? (4) | 2023.11.06 |
---|---|
1주 차 피드백을 2주 차 과제에 적용하기까지 (0) | 2023.11.01 |
원시 타입을 포장하자! (0) | 2023.10.31 |
Junit으로 Scanner, System.out.println() 테스트하기 (0) | 2023.10.25 |
Spring에서 Redis Geofencing기능 활용하기 (0) | 2023.10.06 |