일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SBT
- hadoop
- Java
- Gradle
- Spring
- elastic search
- hibernate
- Linux
- hdfs
- Spring XD
- Clean Code
- Domain Driven Design
- Angular2
- 도메인주도설계
- 제주
- intellij
- DDD
- 엘라스틱서치
- nginx
- scala
- docker
- apache storm
- 스프링 배치
- Storm
- Spring Batch
- design pattern
- elasticsearch
- spark
- Spring Boot
- Hbase
- Today
- Total
욱'S 노트
Spring XD - DSL 본문
소개
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 |