package org.msec.sink.es; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; import java.util.concurrent.BlockingQueue; public class ESClientThread implements Runnable { private Logger LOG = LoggerFactory.getLogger(ESClientThread.class); private BlockingQueue<ESClientThread.ESThreadRequest> queue = null; private String clusterName; private InetSocketTransportAddress serverAddresses; private TransportClient client = null; public ESClientThread(BlockingQueue<ESClientThread.ESThreadRequest> queue, String clusterName, InetSocketTransportAddress serverAddresses) { this.queue = queue; this.clusterName = clusterName; this.serverAddresses = serverAddresses; Settings settings = Settings.builder().put("cluster.name", clusterName). put("client.transport.sniff", true).build(); client = new PreBuiltTransportClient(settings); client.addTransportAddress(this.serverAddresses); } @Override public void run() { // TODO Auto-generated method stub try { while (true) { ESClientThread.ESThreadRequest request = queue.take(); BulkRequestBuilder bulkRequest = client.prepareBulk(); for (int i=0; i<request.sourceList.size(); i++) { //System.out.println("take from queue: " + source); bulkRequest.add(client.prepareIndex(request.indexNameList.get(i), request.indexTypeList.get(i)) .setSource(request.sourceList.get(i))); LOG.info("taken source: " + request.sourceList.get(i)); } BulkResponse bulkResponse = bulkRequest.execute().actionGet(); if (bulkResponse.hasFailures()) { System.out.println("bulk response errorss!" + bulkResponse.buildFailureMessage()); bulkResponse = bulkRequest.execute().actionGet(); } //Thread.sleep(10); } } catch (InterruptedException e) { e.printStackTrace(); } } public static final class ESThreadRequest { public List<String> indexNameList = new ArrayList<String>(); public List<String> indexTypeList = new ArrayList<String>(); public List<String> sourceList = new ArrayList<String>(); @Override public String toString() { return "ESThreadRequest{" + "indexNameList=" + indexNameList + ", indexTypeList=" + indexTypeList + ", sourceList=" + org.apache.commons.lang.StringUtils.join(sourceList.toArray(), ',') + '}'; } public void clear() { indexNameList.clear(); indexTypeList.clear(); sourceList.clear(); } } }