Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] fix: 외부 메시지 큐(RabbitMQ) 도입, 분산 환경 채팅 안 되던 버그 수정 #630

Merged
merged 10 commits into from
Oct 23, 2024

Conversation

takoyakimchi
Copy link
Contributor

@takoyakimchi takoyakimchi commented Oct 9, 2024

이슈

개발 사항

  • local에서는 기존에 쓰던 in-memory 기반 메시지 큐를 사용합니다. (정상 작동 ✅)
  • dev에서는 localhost (=dev)의 RabbitMQ를 사용합니다. (정상 작동 ✅)
  • prod에서는 외부 서버(메시지 큐 전용 서버)의 RabbitMQ를 사용할 예정입니다. (포트 연결 확인 ✅ // 분산채팅 -> 확인 필요)

리뷰 요청 사항 (없으면 삭제해 주세요)

  • prod 환경으로 머지하기 전에, 쉘 스크립트 수정해서 환경변수 주입해야 합니다. (⚠️ 주의 필요 ⚠️)
  • 환경 분리가 적절하게 잘 되었는지 확인 부탁드립니다.
  • prod에서 작동하는지 확실히 테스트하고 prod에 적용하고 싶은데, 어떻게 테스트해보면 좋을지 이야기 나눠보고 싶어요.

전달 사항 (없으면 삭제해 주세요)

  • 웹 소켓 endpoint들이 바뀔 예정입니다. 최대한 원래 쓰던 endpoint 그대로 가져가고 싶었는데 쉽지 않더라구요... 😭

Copy link

github-actions bot commented Oct 9, 2024

Test Results

221 tests   221 ✅  18s ⏱️
 45 suites    0 💤
 45 files      0 ❌

Results for commit 6f456ce.

♻️ This comment has been updated with latest results.

Comment on lines +35 to +40
rabbitmq:
host: ${RABBITMQ_HOST}
username: ${RABBITMQ_USERNAME}
password: ${RABBITMQ_PASSWORD}
port: 5672
stomp-port: 61613
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dev에서는 로컬 서버와 default port를 사용합니다.

Comment on lines +32 to +35
management:
health:
rabbit:
enabled: false
Copy link
Contributor Author

@takoyakimchi takoyakimchi Oct 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

local 환경에서는 RabbitMQ를 쓰지 않고 in-memory 메시지큐를 사용하는데
프로파일 분리를 해도 자꾸 RabbitMQ 헬스체크를 시도해서 해당 설정 껐습니다.

Comment on lines +35 to +40
rabbitmq:
host: ${RABBITMQ_PROD_HOST}
username: ${RABBITMQ_PROD_USERNAME}
password: ${RABBITMQ_PROD_PASSWORD}
port: 3100 # initial connection port: use 3100 instead of 5672
stomp-port: 9100 # STOMP port: use 9100 instead of 61613
Copy link
Contributor Author

@takoyakimchi takoyakimchi Oct 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

메시지 큐 전용 서버에서는 기본 포트인 5672, 61613을 사용하지 않고
인바운드 규칙에 열려 있는 3100, 9100을 사용합니다.
이걸 사용하려면 /etc/rabbitmq에서 포트를 바꿔주는 설정을 먼저 해야 합니다. (prod와 같은 subnet에서 연결 테스트 완료)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

토미가 추가로 만들어주신 보안 그룹을 설정 해주신거죵?
이 외에도 코드에 드러나지 않는 변경 사항이 많을 것 같은데, 이런 내용은 추적하기 힘드니 따로 기록한 뒤에 공유해주시면 좋을 것 같습니다!

Copy link
Contributor Author

@takoyakimchi takoyakimchi Oct 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

좋네요. 노션에 정리해놓은 게 있어서, 이슈에 올려 놓았습니다!
#616 (comment)

Comment on lines +94 to +107
@Bean
public Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.registerModule(javaTimeModule());
return new Jackson2JsonMessageConverter(objectMapper);
}

@Bean
public Module javaTimeModule() {
return new JavaTimeModule()
.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(TIME_FORMAT))
.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(TIME_FORMAT));
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기본 설정만으로는 LocalDateTime을 직렬화하지 못해서 작성함
(기본 설정으로는 배열로 직렬화하도록 되어 있음)

@takoyakimchi takoyakimchi added 🐞 bug 버그 수정 🖥 backend backend labels Oct 11, 2024
jimi567
jimi567 previously approved these changes Oct 18, 2024
Comment on lines 5 to 9
@Component
public interface ChatTemplate {

void convertAndSend(Long chatRoomId, Object payload);
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

interface 빈으로 등록하고 계십니당

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반영 완

Comment on lines +40 to +43
// template.convertAndSend(
// "/topic/invite/" + request.receiverMemberId(),
// new InviteToChatRoomResponse(request.chatRoomId())
// );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

??

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일대일 채팅방 만들때 다시 로직 살릴예정!

import org.springframework.context.annotation.Profile;

@Configuration
@EnableRabbit
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 이런게 있군용

jimi567
jimi567 previously approved these changes Oct 18, 2024
Copy link
Member

@jimi567 jimi567 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

나이스요!

Copy link
Contributor

@J-I-H-O J-I-H-O left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

설명 듣고 다시 리뷰하겠습니당~

Comment on lines +35 to +40
rabbitmq:
host: ${RABBITMQ_PROD_HOST}
username: ${RABBITMQ_PROD_USERNAME}
password: ${RABBITMQ_PROD_PASSWORD}
port: 3100 # initial connection port: use 3100 instead of 5672
stomp-port: 9100 # STOMP port: use 9100 instead of 61613
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

토미가 추가로 만들어주신 보안 그룹을 설정 해주신거죵?
이 외에도 코드에 드러나지 않는 변경 사항이 많을 것 같은데, 이런 내용은 추적하기 힘드니 따로 기록한 뒤에 공유해주시면 좋을 것 같습니다!

# Conflicts:
#	.github/workflows/backend-cd-workflow-dev.yml
#	.github/workflows/backend-cd-workflow-prod.yml
#	backend/src/main/java/com/happy/friendogly/chat/controller/ChatSocketController.java
@takoyakimchi takoyakimchi merged commit 14bbd65 into develop Oct 23, 2024
3 checks passed
@takoyakimchi takoyakimchi deleted the feature/#616 branch October 23, 2024 11:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🖥 backend backend 🐞 bug 버그 수정
Projects
None yet
Development

Successfully merging this pull request may close these issues.

분산 환경에서 채팅이 전송되지 않는 버그 수정 / 채팅 RabbitMQ 도입
4 participants