Java Flume自定义HTTPSourceHandler gzip文件

Java Flume自定义HTTPSourceHandler gzip文件,java,flume,flume-ng,Java,Flume,Flume Ng,我正在尝试创建一个自定义Flume HTTPSourceHandler,它处理在HTTP请求的POST正文中发送的文件的内容,并且该POST的有效负载将被gzip压缩 我是Flume新手,正在努力理解如何将此GZip文件的内容(或任何相关数据)作为Flume事件返回 下面是我正在处理的一些不完整的代码。现在的主要目标是简单地将文件的控制台打印到控制台 任何提示、示例等都会非常有用 import org.apache.flume.Event; import org.apache.flume.sou

我正在尝试创建一个自定义Flume HTTPSourceHandler,它处理在HTTP请求的POST正文中发送的文件的内容,并且该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
    }

}
import org.apache.flume.Event;
导入org.apache.flume.source.http.HTTPSourceHandler;
导入org.apache.http.HttpHeaders;
导入javax.servlet.http.HttpServletRequest;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.zip.gzip输入流;
公共类HttpGzipHandler扩展HTTPSourceHandler{
公共HttpGzipHandler(){
}
公共列表getEvents(HttpServletRequest请求)引发异常{
布尔值isgzip=request.getHeader(HttpHeaders.CONTENT\u编码)!=null
&&getHeader(HttpHeaders.CONTENT_ENCODING).contains(“gzip”);
gzip输入流gzip输入流=新的gzip输入流(request.getInputStream());
List eventList=newarraylist(0);
//TODO:返回事件
}
}
你可以看看我为一个名为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;
//创建适当的标题
Map eventHeaders=new HashMap();
eventHeaders.put(…,…);
//创建仅包含一个事件的事件列表
ArrayList eventList=新建ArrayList();
Event-Event=EventBuilder.withBody(data.getBytes(),eventHeaders);
添加(事件);
返回事件列表;