Error
- 채팅방 추가할 시 해당 date를 elastic에서 받아오지 못함.
- 그래서 채팅방 추가 할 시 오류가 나면서 sidebar와 채팅방 자체가 뜨지 않음
문제
- 항상 생성한 방의 date만 받아오지 못함.
- 연결수립을 요청하면 이전데이터는 잘 받아오는데 해당 데이터는 받아오지 못함.
가설
- 채팅방 생성 시 elastic에 insert를 하는데 insert와 거의 동시에 select 전송이 가버려서 반응이 느림.
- 현재는 가능성이 가장 높아 보임
- 이유는 debug 모드로 실행시켰을 시 데이터가 잘 받아와짐. 문제가 전혀 보이지 않음.
- 그래서 select를 일으키는 시간을 조금 미뤄보기로 함.
try {
Thread.sleep(500);
currentChat = service.getMessageListbyChatRoomOne(roomInfo.getChatroom_no(), 1);
} catch (InterruptedException e) { e.printStackTrace(); }
원인을 알아챌 수 있었던 hint
for(ChatRoomVO chatRoom : roomList) {
// chatRoomVO의 chatList에 대화 내용들 담기.
int chatRoom_no = chatRoom.getChatroom_no();
// 만약 elastic에서 데이터를 못 받아온다면 직접 날짜값 집어넣기.
if(chatRoom_no == roomInfo.getChatroom_no()){
chatRoom.setChatList(currentChat);
}
// elastic에서 chatList 뽑기.
lateChat = service.getMessageListbyChatRoomOne(chatRoom_no, 1);
// 뽑은 chatList를 해당 room의 chatList에 담기.
chatRoom.setChatList(lateChat);
}
- 여기의 service 부분에서 해당 채팅방 번호 조회 시 for문에서 튕겨져 나와 버림.
- 아마 elastic에 데이터가 존재하지 않아서 그런 듯 함.(insert는 했지만 select 문 속도가 비슷하게 작동해서 그런듯)
solution
- elastic에 insert와 select를 거의 비슷한 속도로 전달하기 때문에 받아오는 과정에서 오류가 일어난 듯함
- thread로 실행 속도를 늦춰주니 잘 작동함.
Summary
- 데이터 insert를 하고 그 값을 select를 할 시에는
- controller를 따로 사용하거나(이거 조금 더 나은 방법인 듯 함. 그렇지만 실제 실행 시 잘 작동할 지는 확실할 수 없음.)
- 시간을 지연시키는 thread를 사용하여 데이터가 전송되고 도달할 시간을 늦추자.
- while문을 사용해서 값을 받아올때까지 요청하는 것 도 있을 듯 한데...
- 어느것이 더 나은지 확실히 판단하기에는 지금의 내 수준에서 어려운 듯 하다.
Etc
- 다른 오류를 찾음.
- 맴버 초대 시 이름을 입력하면 session 이 만료됨...
- 다음에 수정해야지...
Uploaded by Notion2Tistory v1.1.0