[RabbitMQ] Scheduling 사용하기
- RabbitMQ
- 2020. 8. 22.
이번 글에서는 Spring boot의 Scheduling 기능을 사용해보도록 하겠습니다.
1. Fixed Rate
주기적로 메세지를 생성하기 위해선 Fixed Rate를 사용합니다.
1-1) Producer
@Service
public class RabbitmqProducer {
@Autowired
private RabbitTemplate rabbitTemplate;
private Logger log = LoggerFactory.getLogger(RabbitmqProducer.class) ;
private int i = 0;
@Scheduled(fixedRate = 1000)
public void sendMessage(){
i++;
rabbitTemplate.convertAndSend("q.minho", i);
log.info("send message " + i);
}
}
먼저 메세지를 생성하는 sendMessage 메서드에 @Scheduled 어노테이션을 입력합니다. 1초에 한번씩 메세지를 Publish 하기위해 fixedRate = 1000을 입력합니다. 이제 이 Producer는 1초에 한번씩 "q.minho" Queue로 메세지를 Publish 합니다.
@Scheduled로 등록된 메서드에 매개변수를 입력받아야되는 경우에는 에러가 발생합니다.
이를 해결하기 위해선 sendMessage에 @Scheduled을 등록하는 것이 아니라, 다른 메서드에 @Scheduled를 달고 주기적으로 sendMessage를 호출하며 파라미터를 넘겨줘야 합니다. 간단히 하기위해 파라미터가 없는 메서드로 작성하겠습니다.
1-2) ProducerApplication
@SpringBootApplication
@EnableScheduling
public class RabbitmqProducerApplication implements CommandLineRunner {
//@Autowired
//private RabbitmqProducer rabbitmqProducer;
public static void main(String[] args) {
SpringApplication.run(RabbitmqProducerApplication.class, args);
}
@Override
public void run(String... args) {
// rabbitmqProducer.sendMessage("minho");
}
}
Producer Application에는 Scheduling 기능을 허용하기 위해 @EnableScheduling 어노테이션을 입력해줍니다. @Scheduled에 등록된 메서드는 알아서 주기적으로 실행되기때문에 run에서 직접 실행할 필요가 없습니다. 따라서 필요없는 RabbitmqProducer와 run 메서드는 주석처리 합니다.
이제 RabbitmqProducerApplication을 실행하면 아래와 같이 1초에 한번씩 메세지를 Publish하는 것을 확인할 수 있습니다.
1-3) Consumer
Consumer는 따로 수정할 필요가 없습니다. Consumer Application을 실행하면, 1초에 한번씩 메세지를 Consume 하는 것을 확인할 수 있습니다.
참고 자료 : https://www.udemy.com/course/rabbitmq-java-spring-boot-for-system-integration/
추천서적
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'RabbitMQ' 카테고리의 다른 글
[RabbitMQ] JSON Message Format 사용하기 - 2 (0) | 2020.08.22 |
---|---|
[RabbitMQ] JSON Message Format 사용하기 - 1 (0) | 2020.08.22 |
[RabbitMQ] Multiple Consumer 사용하기 (0) | 2020.08.22 |
[RabbitMQ] Spring boot 기본 사용법 (0) | 2020.08.22 |
[RabbitMQ] Message System을 사용하는 이유 (0) | 2020.08.22 |