Skip to content

Latest commit

 

History

History

batch

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

배치서버

역할

  • 일정 시간마다 채팅 차단된 사용자의 전체 메시지 가림 처리

기술스택

  • Java 17
  • Springboot 3.0.2
  • Spring Batch
  • Spring Scheduler
  • Spring Data JPA
  • Redis
  • Mongo DB
  • Mysql8

아키텍처

스크린샷 2023-02-18 오전 1 36 58

제공 기능

기능 설명
매시지 가림 처리 채팅 차단된 사용자의 전체 메시지 가림 처리

구현

@RequiredArgsConstructor
  private class MyTasklet implements Tasklet {

    private final ChatRepository chatRepository;
    private final UserRepository userRepository;

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
      List<User> blockedUsers = userRepository.findAllByIsDone(false);
      blockedUsers.forEach(blockedUser -> {
        List<Message> messages = chatRepository.findAllByTopicIdAndSender(
          blockedUser.getTopicId(), blockedUser.getName());
        messages.forEach(message -> {
          message.hide();
          chatRepository.save(message);
        });
        blockedUser.done();
        userRepository.save(blockedUser);
      });

      return RepeatStatus.FINISHED;
    }
  }
  @Scheduled(cron = "0 */5 * * * *")
  public void runJob() {
    HashMap<String, JobParameter<?>> confMap = new HashMap<>();
    confMap.put("time", new JobParameter(System.currentTimeMillis(), long.class));
    JobParameters jobParameters = new JobParameters(confMap);

    try {
      jobLauncher.run(job, jobParameters);
    } catch (JobExecutionAlreadyRunningException | JobInstanceAlreadyCompleteException |
             JobParametersInvalidException | JobRestartException e) {
      log.error(e.getMessage());
    }
  }

프로젝트 관련 기록

@ControllerAdvice 클래스에서 body에 데이터 넣어서 반환할 때 view를 찾는 문제

spring data redis 데이터 조회 시 이상하게 나오는 문제

brew services start redis로 실행 시 주의할 점

채팅 아키텍처 설계하기 v1

채팅 아키텍처 설계하기 v2

StompSession send() ClassCastException

StompSession BlockingQueue 메시지 전달 안되는 문제

Redis cluster

NHN 분산 시스템에서 데이터를 전달하는 효율적인 방법

embedded mongoDB Set the de.flapdoodle.mongodb.embedded.version property 오류

testcontainer로 redis 테스트하기 testcontainer BeforeAllCallback 여러번 호출되는 문제

웹소켓 서버 수평 확장