spring-xd

How can I use my own processor module to create a tap in Spring-XD


I created a stream named vfs-od-fe-hb,where the source is vfs, the processors are od and fe, and the sink is hb. I want to create a tap in the postion of fe and store the result into hdfs.

My shell command is:

stream create --name vfs-od-fe-hb-tap-ib-hdfs --definition "tap:stream:vfs-od-fe-hb.fe > ib > hdfs" --deploy

ib is my processor, it can handle the messages from fe successfully, but now the wrong messages:

Command failed org.springframework.xd.rest.client.impl.SpringXDException: XD133E:(pos 34): Expected channel prefix of 'queue' or 'topic' but found 'hdfs'


Solution

  • If ib is a processor, the syntax should be

    tap:stream:vfs-od-fe-hb.fe > ib | hdfs
    

    i.e. the tap (named channel) is ib's input channel and we pipe its output as normal.

    The parser is reacting to the > hdfs because > can only be between a named channel and processor or sink.

    (or after a processor when sending to a named channel - queue:..., topic:...).