2015-11-11 7 views
2

Я пытаюсь создать пользовательский Flum HTTPSourceHandler, который обрабатывает содержимое файла, отправленного в тело POST HTTP-запроса, и полезная нагрузка этого сообщения будет gzipped.Flume Custom HTTPSourceHandler GZipped File

Я новичок в 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

Вы можете посмотреть на 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;