我正在尝试创建一个自定义Flume HTTPSourceHandler来处理在HTTP请求的POST正文中发送的文件的内容,并且该帖子的有效负载将被gzip压缩。
我是Flume的新手,并努力了解如何将此GZip文件(或任何数据)的内容作为Flume事件返回。
以下是我正在处理的一些不完整的代码。现在的主要目标是简单地将文件控制台打印到控制台。
任何提示,示例等都会非常有用。
import org.apache.flume.Event;
import org.apache.flume.source.http.HTTPSourceHandler;
import org.apache.http.HttpHeaders;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.GZIPInputStream;
public class HttpGzipHandler extends HTTPSourceHandler{
public HttpGzipHandler(){
}
public List<Event> getEvents(HttpServletRequest request) throws Exception {
boolean isGzipped = request.getHeader(HttpHeaders.CONTENT_ENCODING) != null
&& request.getHeader(HttpHeaders.CONTENT_ENCODING).contains("gzip");
GZIPInputStream gzipInputStream = new GZIPInputStream(request.getInputStream());
List<Event> eventList = new ArrayList<Event>(0);
//TODO: Return the Events
}
}
答案 0 :(得分:0)
您可以查看custom Http handler我为一款名为Cygnus的工具开发的灵感。我认为对你来说重要的部分是创建和发布事件的代码:
// create the appropiate headers
Map<String, String> eventHeaders = new HashMap<String, String>();
eventHeaders.put(..., ...);
// create the event list containing only one event
ArrayList<Event> eventList = new ArrayList<Event>();
Event event = EventBuilder.withBody(data.getBytes(), eventHeaders);
eventList.add(event);
return eventList;