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

distributed-mail 문제 중간 점검(?) #24

Open
wants to merge 9 commits into
base: main
Choose a base branch
from

Conversation

unifolio0
Copy link

구현 방법 1(그냥 깡 구현)

아래와 같은 클래스를 만들어 현재 서버의 포트를 가져오도록 구현했습니다.

@Component
public class ServerPortProvider {

    private final Environment environment;

    public ServerPortProvider(Environment environment) {
        this.environment = environment;
    }

    public int getServerPort() {
        return Integer.parseInt(Objects.requireNonNull(environment.getProperty("local.server.port")));
    }
}

그리고는 말 그대로 깡구현(하드코딩)을 통해 라운드 로빈을 구현해봤습니다

    private final ServerPortProvider serPortProvider;

    @Transactional
    @Scheduled(cron = "0 0 9 * * *", zone = "Asia/Seoul")
    public void sendQuestion() {
        List<Subscribe> subscribes = getSubscribesForThisServer(serPortProvider.getServerPort());
        sendQuestionMails(subscribes);
        updateNextQuestions(subscribes);
    }

    private List<Subscribe> getSubscribesForThisServer(int serPort) {
        int serverIndex = getServerIndex(serPort);
        int serverCount = getTotalServerCount();
        return subscribeRepository.findAll().stream()
                .filter(subscribe -> isResponsibleServer(subscribe.getId().intValue(), serverCount, serverIndex))
                .toList();
    }

    private int getServerIndex(int serPort) {
        if (serPort == 8080) {
            return 0;
        } else if (serPort == 9090) {
            return 1;
        }
        return 2;
    }

    private int getTotalServerCount() {
        return 3;
    }

serverCount는 환경 변수로 처리 하면 될 것 같은데 serverIndex는 더 공부해봐야겠네요.

추가로 테스트의 Thread.sleep(2000);의 시간이 부족한 지 어떨 때는 sentMailCountmailReceivedSubscribeUniqueCount, mailReceivedSubscribes가 0으로 나올때도 있고 20으로 통과할 때도 있고 오락가락해서 한번 Thread.sleep(5000);으로 해봤습니다.
그랬더니 테스트가 실패할때는 sentMailCountmailReceivedSubscribeUniqueCount는 0이 나오는데 mailReceivedSubscribes에는 정상적으로 20개가 다 들어있었습니다.
그래서 Thread.sleep(10000);으로 늘렸더니 정상적으로 통과합니다. 해당 부분은 좀 더 공부해봐야겠네요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant