HttpClientUtil.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package com.tzld.piaoquan.wecom.utils;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.util.concurrent.locks.Lock;
  5. import java.util.concurrent.locks.ReentrantLock;
  6. /**
  7. * http util
  8. *
  9. * @author xueyiming
  10. */
  11. public class HttpClientUtil {
  12. private static final String DEFAULT_SHARED_KEY = "DEFAULT_SHARED_KEY";
  13. /**
  14. * 链接建立的超时时间 ms
  15. */
  16. private static final int DEFAULT_CONNECTION_TIMEOUT = 3000;
  17. /**
  18. * 响应超时时间 ms
  19. */
  20. private static final int DEFAULT_SOCKET_TIMEOUT = 3000;
  21. /**
  22. * 每个路由的最大连接数
  23. */
  24. private static final int DEFAULT_DEFAULT_MAX_PER_ROUTE = 50;
  25. /**
  26. * 最大连接数
  27. */
  28. private static final int DEFAULT_DEFAULT_MAX_TOTAL = 200;
  29. /**
  30. * 重试次数,默认0
  31. */
  32. private static final int DEFAULT_RETRY_COUNT = 5;
  33. /**
  34. * 从connection pool中获得一个connection的超时时间 ms
  35. */
  36. private static final int DEFAULT_CONNECTION_WAIT_TIMEOUT = 300;
  37. private static final Map<String, HttpPoolClientUtil> CREATED_HTTP_CLIENTS = new HashMap<>();
  38. private static final Lock LOCK = new ReentrantLock();
  39. private HttpClientUtil() {
  40. }
  41. public static HttpPoolClientUtil useDefault() {
  42. return createCached(DEFAULT_SHARED_KEY);
  43. }
  44. public static HttpPoolClientUtil createCached(String cachedKey) {
  45. HttpPoolClientUtil httpPoolClientUtil = CREATED_HTTP_CLIENTS.get(cachedKey);
  46. if (httpPoolClientUtil != null) {
  47. return httpPoolClientUtil;
  48. }
  49. LOCK.lock();
  50. try {
  51. httpPoolClientUtil = CREATED_HTTP_CLIENTS.get(cachedKey);
  52. if (httpPoolClientUtil == null) {
  53. httpPoolClientUtil = create(DEFAULT_CONNECTION_TIMEOUT, DEFAULT_SOCKET_TIMEOUT, DEFAULT_DEFAULT_MAX_PER_ROUTE, DEFAULT_DEFAULT_MAX_TOTAL, DEFAULT_RETRY_COUNT, DEFAULT_CONNECTION_WAIT_TIMEOUT);
  54. CREATED_HTTP_CLIENTS.put(cachedKey, httpPoolClientUtil);
  55. }
  56. } finally {
  57. LOCK.unlock();
  58. }
  59. return httpPoolClientUtil;
  60. }
  61. /**
  62. * 创建httpclient
  63. *
  64. * @param connectTimeout 连接超时时间 ms
  65. * @param socketTimeout 读超时时间(等待数据超时时间)ms
  66. * @param maxPerRoute 每个路由的最大连接数
  67. * @param maxTotal 最大连接数
  68. * @param retryCount 重试次数
  69. * @param connectionWaitTimeout 连接等待超市时间 ms
  70. * @return httpclient instance
  71. */
  72. public static HttpPoolClientUtil create(int connectTimeout, int socketTimeout, int maxPerRoute, int maxTotal, int retryCount, int connectionWaitTimeout) {
  73. return HttpPoolClientUtil.create(connectTimeout, socketTimeout, maxPerRoute, maxTotal, retryCount, connectionWaitTimeout);
  74. }
  75. }