/**
*
*/
package es;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.entity.ContentType;
import org.apache.http.message.BasicHeader;
import org.apache.http.nio.entity.NStringEntity;
import org.apache.http.util.EntityUtils;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.Gson;
import jframe.demo.elasticsearch.weike.MemberDO;
/**
* @author dzh
* @date Sep 23, 2016 11:13:08 AM
* @since 1.0
*/
@Ignore
public class TestRestClient {
static Logger LOG = LoggerFactory.getLogger(TestRestClient.class);
RestClient client;
@Before
public void init() {
// final CredentialsProvider credentialsProvider = new
// BasicCredentialsProvider();
// credentialsProvider.setCredentials(AuthScope.ANY, new
// UsernamePasswordCredentials("user", "password"));
client = RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")).setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
@Override
public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
return requestConfigBuilder.setConnectTimeout(5000).setSocketTimeout(30000);
}
}).setMaxRetryTimeoutMillis(30000)
// .setHttpClientConfigCallback(new
// RestClientBuilder.HttpClientConfigCallback() {
// @Override
// public HttpAsyncClientBuilder
// customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder)
// {
// return httpClientBuilder
// .setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(1).build());
// // .setDefaultCredentialsProvider(credentialsProvider);
// }
// })
.build();
// Credentials credentials = new UsernamePasswordCredentials("root",
// "dzh");
// client.getState().setCredentials(AuthScope.ANY, credentials);
}
@Test
@Ignore
public void testBulkTest() {
// client.performRequest(method, endpoint, headers)
List<Object> memList = new LinkedList<>();
int i = 0;
while (i < 1000) {
MemberDO mem = new MemberDO();
mem.setAvgPrice(1.0);
mem.setBuyerId(1l);
mem.setBuyerNick("戴忠");
mem.setMobile("18616020610");
mem.setEmail("dzh_11@qq.com");
mem.setCity("上海");
memList.add(mem);
i++;
}
StringBuilder buf = new StringBuilder(1024);
for (Object mem : memList) {
buf.append("{\"index\": {}}");
buf.append("\n");
buf.append(Gson.toJson(mem));
buf.append("\n");
}
// System.out.println(buf.toString());
HttpEntity entity = new NStringEntity(buf.toString(), ContentType.APPLICATION_JSON);
System.out.println(buf.length() * 2 / (1024));
// indexData("/weike/member/_bulk", entity);
}
static Gson Gson = new Gson();
@Test
@Ignore
public void indexTest() throws Exception {
final MemberDO mem = new MemberDO();
mem.setAvgPrice(1.0);
mem.setBuyerId(1l);
mem.setBuyerNick("戴忠");
mem.setMobile("18616020610");
mem.setEmail("dzh_11@qq.com");
mem.setCity("上海");
long start = System.currentTimeMillis();
int count = 10000;
AtomicLong sumTime = new AtomicLong(0);
CountDownLatch latch = new CountDownLatch(count);
final ExecutorService executor = Executors.newFixedThreadPool(100);
while (count > 0) {
executor.submit(() -> {
long startTime = System.currentTimeMillis();
String json = Gson.toJson(mem);
HttpEntity entity = new NStringEntity(json, ContentType.APPLICATION_JSON);
String path = "/weike/member";
// if (!"".equals(sellerId)) {
// path += "?routing=" + sellerId;
// }
try {
Response indexResponse = client.performRequest("POST", path, Collections.<String, String> emptyMap(), entity);
long stopTime = System.currentTimeMillis() - startTime;
sumTime.addAndGet(stopTime);
LOG.info("indexMember {} - {}ms", json, stopTime);
LOG.info("indexResponse {}", indexResponse.toString());
} catch (IOException e) {
LOG.error(e.getMessage(), e.fillInStackTrace());
} finally {
latch.countDown();
}
});
count--;
}
latch.await();
LOG.info("latch stop usage-{}ms sum-{}ms avg-{}ms", System.currentTimeMillis() - start, sumTime, sumTime.get() / 1000);
executor.shutdownNow();
}
private void indexData(String path, HttpEntity entity) {
try {
Response indexResponse = client.performRequest("POST", path, Collections.<String, String> emptyMap(), entity);
LOG.info(indexResponse.toString());
} catch (IOException e) {
LOG.error(e.getMessage(), e.fillInStackTrace());
}
}
@After
public void stop() {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testReq() throws Exception {
Response response = client.performRequest("GET", "/", Collections.singletonMap("pretty", "true"));
System.out.println(EntityUtils.toString(response.getEntity()));
// index a document
HttpEntity entity = new NStringEntity("{\n" + " \"user\" : \"kimchy\",\n" + " \"post_date\" : \"2009-11-15T14:12:12\",\n"
+ " \"message\" : \"trying out Elasticsearch\"\n" + "}", ContentType.APPLICATION_JSON);
String u = URLEncoder.encode("root:dzh", "utf-8");
BasicHeader auth = new BasicHeader("Authorization", "Basic " + u);
Response indexResponse = client.performRequest("PUT", "/twitter/tweet/1", Collections.<String, String> emptyMap(), entity);
}
public void testReqAsync() {
// int numRequests = 10;
// final CountDownLatch latch = new CountDownLatch(numRequests);
// for (int i = 0; i < numRequests; i++) {
// client.performRequestAsync("PUT", "/twitter/tweet/" + i,
// Collections.<String, String>emptyMap(),
// // assume that the documents are stored in an entities array
// entities[i], new ResponseListener() {
// @Override
// public void onSuccess(Response response) {
// System.out.println(response);
// latch.countDown();
// }
//
// @Override
// public void onFailure(Exception exception) {
// latch.countDown();
// }
// });
// }
// // wait for all requests to be completed
// latch.await();
}
@Test
@Ignore
public void testSniffer() {
}
}