-
1、首先是需要定义一个类实现Iterceptor接口,然后在他内部在定义一个内部类实现 Iterceptor.Builder接口即可,看代码!!
package com.liufu.storm.iterceptor; import java.util.List; import org.apache.flume.Context; import org.apache.flume.Event; import org.apache.flume.interceptor.Interceptor; public class FlumeIterceptor implements Interceptor{ private String appID; public FlumeIterceptor() { // TODO Auto-generated constructor stub } public FlumeIterceptor(String appID) { this.appID = appID; } public void initialize() { // TODO Auto-generated method stub } public Event intercept(Event event) { // TODO Auto-generated method stub String body = new String(event.getBody()); body = appID + "&&" + body; event.setBody(body.getBytes()); return event; } public List<Event> intercept(List<Event> events) { for(Event event : events){ intercept(event); } return events; } public void close() { // TODO Auto-generated method stub } //这个很重要,一定是需要为public,否则的话,外部是调用不了这个Builder的。 public static class FlumeIterceptorBuild implements Interceptor.Builder{ /** * 定义一些需要外部传进来的参数,并且在这里定义之后才能够从configure获取,然后放在Build中。 */ private String appID; public void configure(Context context) { // TODO Auto-generated method stub appID = context.getString("appID","default"); } public Interceptor build() { // TODO Auto-generated method stub return new FlumeIterceptor(appID); } } }
转载于:https://my.oschina.net/liufukin/blog/799170