욱'S 노트

Spring XD - DSL 본문

Programming/Spring XD

Spring XD - DSL

devsun 2015. 1. 30. 13:10

소개 


Spring XD는 stream을 정의하기 위한 DSL을 제공한다. 배치 작업의 스텝 처럼 정교한 stream을 정의할 수 있도록 진화해오고 있다.


Pipes and Filters


단순한 선형의 stream은 일련의 순서를 가진 모듈들의 집합이다. 기본적으로 Input Source, Processing Steps(optional) 그리고 Ouput Sink 이다. 가장 단순한 예제는 Http로 부터 읽어서 File 로 출력하는 것이다. DSL로 표현하ㅕㄴ


http | file


스트림은 어떤 처리를 포함할 수 있다.


http | filter | transform | file


스트림에서 모듈간의 연결은 |를 이용해서 표현한다.


Module Parameters


각 모듈은 파라미터를 가질 수 있다. 모듈에 의해 제공할 수 있는 파라미터는 모듈의 구현체에 의해 정의된다. 예를 들어 http source 모듈은 port를 노출한다. 데이터 획득 포드를 세팅하기 위해,


http --port=1337


만약 내용이 space나 | character를 포함한다면 quote 파라미터를 사용하면 된다.


transform --expression='new StringBuilder(payload).reverse()'


만약 파라미터의 값이 '이 포함되어있다면 두번 single quote를 사용하면 된다.


scan --query='select * from customers where name=''Smith'''


Named Channel


Source나 sink 대신에 named channel을 사용하는 것이 가능하다. 일반적으로 stream에 있는 모듈은 인터넷 채널을 사용하여 접속을 한다. 하지만 명시적인 named channel을 사용함으로써 더 정교한 플로우를 만드는 것이 가능하다. Unix 처럼 sourcing/sinking 데이터의 from/to을 > 로 표현한다. Named channel은 channel type을 사용하여 명시한다. 채널 타입은 다음과 같다.


queue - point to point(p2p) 채널 타입


topic - pub/sub 채널 타입


다른 입력 채널로부터 전달된 데이터를 공유하기 위해 named channel을 사용한 예제이다.


queue:foo > file


http > queue:foo


time > queue:foo


taps 라는 특수한 named channel은 publishing data를 mutiple sink할 수 있다.


tap:stream:mystream > file


tap:stream:mystream > log


mystream이 받아서 파일과 로그로 데이터를 쓴다.


Labels


Label은 alias 또는 group modules를 의미한다. Label은 :를 사진 단순한 이름이다. 다른 스트림들이 쉽게 특정한 모듈의 정의를 이용하기 쉽게 해준다.


mystream = http | obfuscator: transform --expression=payload.replaceAll('password','*') | file


Label은 동일한 이름의 모듈이 하나의 스트림에서 사용될 때 헷갈리지 않도록 해주는데 유용하다.


mystream = http | uppercaser: transform --expression=payload.toUpperCase() | exclaimer: transform --expression=payload+'!' | file







'Programming > Spring XD' 카테고리의 다른 글

Spring XD - Batch Jobs  (0) 2015.02.02
Spring XD - 아키텍처  (0) 2015.01.30
Spring XD - 어플리케이션 설정  (0) 2015.01.29
Spring XD - 분산모드 시작하기  (0) 2015.01.29
Spring XD - 시작하기  (0) 2015.01.29
Comments