<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
// 1. RouteBuilder 상속
// 2. component로 등록
@Component
public class TimerRouter extends RouteBuilder {
// 3. configure() 메소드 구현
/*
* 이 메소드 내에서 라우트 구현
* timer를 통해 받아온 메시지를 변형시켜 로그로 출력하는 라우트
*
* cf. 보통의 라우트 패턴
* - queque를 통해 받아온 메시지를 transform 후 다시 데이터베이스로 내보냄
*/
@Override
public void configure() throws Exception {
// 코드 구현
}
}
@Component
public class TimerRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
/**
* 엔드포인트 [endpoint | channel]
* 엔드포인트 1 : timer (queque)
* 엔드포인트 2 : log(database)
*/
// 1) consumer endpoint 정의
// 어디서 가져올지 (from where)
// : timer (queque)
// from("{엔드포인트 키워드}:{엔드포인트 이름}")
from("timer:nyj-timer")
// 2) producer endpoint 정의
// 어디로 내보낼지 (to where)
// : log (database)
// to("{엔드포인트 키워드}:{엔드포인트 이름}")
.to("log:nyj-timer");
}
}
// 총 1개의 라우트가 실행됨
Routes startup summary (total:1 started:1)
// 아무런 설정도 하지 않은 경우, default로 1초마다 한개의 라우트가 실행됨
// Body: [Body is null] : 이때 body메시지는 null
2m2021-11-14 17:09:08.336
Exchange[ExchangePattern: InOnly, BodyType: null, Body: [Body is null]]]
2021-11-14 17:09:09.294
Exchange[ExchangePattern: InOnly, BodyType: null, Body: [Body is null]]
.....
-> timer의 역할 : 1초마다 null메시지를 생산
-> log의 역할 : 받아온 메시지를 꺼내서 로그로 출력
=>