[CAMEL] Endpoint

.·2021년 11월 14일
0

CAMEL

목록 보기
2/5

프로젝트에 추가해줄 dependency 목록

  • Spring Boot DevTools
  • Apache Camel
  • Spring Boot Actuator
  • Spring Web
<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 {
    		// 코드 구현
	}
}
  1. RouteBuilder 상속
  2. component로 등록
  3. configure() 메소드 구현

from(), to() 엔드포인트

@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의 역할 : 받아온 메시지를 꺼내서 로그로 출력
=>

  • queue에서 메시지를 받아오고
    메시지를 꺼내서 데이터베이스나 또 다른 queue로 보내는 것과 같은 원리
  • queue대신 timer를 사용, database 대신 log를 사용해본 예제

0개의 댓글

관련 채용 정보