0


springCloud使用apache的http类和RestTemplate以及Eureka

  1. 使用apache的:
  1. package com.csgholding.pvgpsp.eqp.util;
  2. import com.esotericsoftware.minlog.Log;
  3. import org.apache.commons.collections4.MapUtils;
  4. import org.apache.http.HttpEntity;
  5. import org.apache.http.client.config.RequestConfig;
  6. import org.apache.http.client.methods.CloseableHttpResponse;
  7. import org.apache.http.client.methods.HttpGet;
  8. import org.apache.http.client.utils.URIBuilder;
  9. import org.apache.http.impl.client.CloseableHttpClient;
  10. import org.apache.http.impl.client.HttpClients;
  11. import org.apache.http.util.EntityUtils;
  12. import org.springframework.http.HttpHeaders;
  13. import org.springframework.http.HttpStatus;
  14. import org.springframework.http.MediaType;
  15. import org.springframework.http.ResponseEntity;
  16. import org.springframework.http.client.SimpleClientHttpRequestFactory;
  17. import org.springframework.web.client.RestTemplate;
  18. import java.io.IOException;
  19. import java.net.URI;
  20. import java.net.URISyntaxException;
  21. import java.util.Map;
  22. /**
  23. * @Classname HttpClientUtil
  24. * @Date 2021/5/11 8:45
  25. * @Created by jj.Zhou
  26. */
  27. public class HttpClientUtil {
  28. //字符集
  29. private static final String CHARSET = "UTF-8";
  30. private static RequestConfig defaultRequestConfig = RequestConfig
  31. .custom()
  32. //设置等待数据超时时间
  33. .setSocketTimeout(300000)
  34. //设置连接超时时间
  35. .setConnectTimeout(300000)
  36. //设置从连接池获取连接的等待超时时间
  37. .setConnectionRequestTimeout(300000)
  38. //.setStaleConnectionCheckEnabled(true)
  39. .build();
  40. //释放资源,httpResponse为响应流,httpClient为请求客户端
  41. private static void release(CloseableHttpResponse httpResponse, CloseableHttpClient httpClient) throws IOException {
  42. if (httpResponse != null) {
  43. httpResponse.close();
  44. }
  45. if (httpClient != null) {
  46. httpClient.close();
  47. }
  48. }
  49. //get请求带参数、带请求头
  50. public static String getAndJson(String urlWithParams, Map<String, String> header, Map<String, String> param) throws URISyntaxException {
  51. // 创建uri
  52. URIBuilder builder = new URIBuilder(urlWithParams);
  53. if (param != null) {
  54. for (String key : param.keySet()) {
  55. builder.addParameter(key, param.get(key));
  56. }
  57. }
  58. URI uri = builder.build();
  59. // 创建http GET请求
  60. HttpGet httpGet = new HttpGet(uri);
  61. if (!MapUtils.isEmpty(header)) {
  62. header.forEach(httpGet::addHeader);
  63. }
  64. CloseableHttpClient httpClient = null;
  65. String result;
  66. try {
  67. httpClient = HttpClients.createDefault();
  68. CloseableHttpResponse response = httpClient.execute(httpGet);
  69. HttpEntity entity = response.getEntity();
  70. result = EntityUtils.toString(entity, CHARSET);
  71. httpGet.releaseConnection();
  72. release(response, httpClient);
  73. } catch (Exception e) {
  74. throw new RuntimeException(e.getMessage());
  75. } finally {
  76. if (httpClient != null) {
  77. try {
  78. httpClient.close();
  79. } catch (Exception e) {
  80. Log.error(e.getMessage());
  81. }
  82. }
  83. }
  84. return result;
  85. }
  86. //get请求带参数、带请求头
  87. public static String get(String urlWithParams, Map<String, String> header) {
  88. HttpGet httpget = new HttpGet(urlWithParams);
  89. if (!MapUtils.isEmpty(header)) {
  90. header.forEach(httpget::addHeader);
  91. }
  92. CloseableHttpClient httpClient = null;
  93. String result;
  94. try {
  95. httpClient = HttpClients.createDefault();
  96. CloseableHttpResponse response = httpClient.execute(httpget);
  97. HttpEntity entity = response.getEntity();
  98. result = EntityUtils.toString(entity, CHARSET);
  99. httpget.releaseConnection();
  100. release(response, httpClient);
  101. } catch (Exception e) {
  102. throw new RuntimeException(e.getMessage());
  103. } finally {
  104. if (httpClient != null) {
  105. try {
  106. httpClient.close();
  107. } catch (Exception e) {
  108. Log.error(e.getMessage());
  109. }
  110. }
  111. }
  112. return result;
  113. }
  114. public static String get(String urlWithParams) throws IOException {
  115. return get(urlWithParams, null);
  116. }
  117. //发送post请求,带json请求体和请求头
  118. public static ResponseEntity<String> postJson(String url, String json, Map<String, String> headersMap, Integer retryNum) {
  119. SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
  120. factory.setConnectTimeout(120000);
  121. factory.setReadTimeout(120000);
  122. RestTemplate restTemplate = new RestTemplate(factory);
  123. HttpHeaders headers = new HttpHeaders();
  124. headers.setContentType(MediaType.APPLICATION_JSON);
  125. for (Map.Entry<String, String> entry : headersMap.entrySet()) {
  126. headers.add(entry.getKey(), entry.getValue());
  127. }
  128. org.springframework.http.HttpEntity<String> request = new org.springframework.http.HttpEntity<>(json, headers);
  129. ResponseEntity<String> response = null;
  130. try {
  131. response = restTemplate.postForEntity(url, request, String.class);
  132. if (retryNum > 0 && !HttpStatus.OK.equals(response.getStatusCode())) {
  133. retryNum--;
  134. postJson(url, json, headersMap, retryNum);
  135. }
  136. } catch (Exception e) {
  137. if (retryNum > 0) {
  138. retryNum--;
  139. postJson(url, json, headersMap, retryNum);
  140. } else {
  141. throw e;
  142. }
  143. }
  144. return response;
  145. }
  146. }

get方法调用:

  1. public String callMesEqp() {
  2. Map<String, String> header = new HashMap<>();
  3. ResponseEntity<String> response;
  4. HttpStatus statusCode;
  5. String responseBody = "";
  6. try {
  7. responseBody = HttpClientUtil.get("http://127.0.0.1/t1", der);
  8. } catch (Throwable e) {
  9. }
  10. return responseBody;
  11. }

post方法调用:

  1. public String callMesStepEqp(String syncTime) {
  2. Map<String, String> header = new HashMap<>();
  3. ResponseEntity<String> response = null;
  4. HttpStatus statusCode;
  5. String responseBody = "";
  6. MesStepEqpQuery query = new MesStepEqpQuery();
  7. //query就是请求参数,全是字符串
  8. query.setTrxDate(syncTime);
  9. String jsonString = JSON.toJSONString(query);
  10. try {
  11. response = HttpClientUtil.postJson("http://127.0.0.1:8080/t1, jsonString, header, 1);
  12. } catch (Throwable e) {
  13. }
  14. return response.getBody();
  15. }

使用ResTemplate:

  1. @Autowired
  2. RestTemplate restTemplate;
  3. @ApiOperation(value = "通过id获取用户", notes = "通过id获取用户")
  4. @GetMapping("getUserByIdApi")
  5. public Result<UserVO> getUserByIdApi(@ApiParam("用户id") Integer id) {
  6. // UserVO vo = restTemplate.getForObject("http://127.0.0.1:8081/v1/user/getUserById?id=" + id, UserVO.class);
  7. restTemplate.getForObject("http://127.0.0.1:8081/v1/user/getUserById?id=" + id, Result.class);
  8. // return Result.success(vo);
  9. return (restTemplate.getForObject("http://127.0.0.1:8081/v1/user/getUserById?id=" + id, Result.class));
  10. }

使用springCloud的Eureka:

注意我的jdk和cloud版本:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.cloud</groupId>
  7. <artifactId>springCloudPuls</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <modules>
  10. <module>cloud-common</module>
  11. <module>cloud-user</module>
  12. <module>cloud-auth</module>
  13. <module>cloud-eureka</module>
  14. </modules>
  15. <packaging>pom</packaging>
  16. <properties>
  17. </properties>
  18. <dependencyManagement>
  19. <dependencies>
  20. <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
  21. <dependency>
  22. <groupId>org.springframework.cloud</groupId>
  23. <artifactId>spring-cloud-dependencies</artifactId>
  24. <version>2022.0.3</version>
  25. <type>pom</type>
  26. <scope>import</scope>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-dependencies</artifactId>
  31. <version>3.1.5</version>
  32. <type>pom</type>
  33. <scope>import</scope>
  34. </dependency>
  35. <!-- mysql连接-->
  36. <dependency>
  37. <groupId>mysql</groupId>
  38. <artifactId>mysql-connector-java</artifactId>
  39. <version>8.0.28</version>
  40. </dependency>
  41. <!-- 连接池-->
  42. <dependency>
  43. <groupId>com.alibaba</groupId>
  44. <artifactId>druid</artifactId>
  45. <version>1.2.16</version>
  46. </dependency>
  47. <dependency>
  48. <groupId>junit</groupId>
  49. <artifactId>junit</artifactId>
  50. <version>4.13.2</version>
  51. <scope>test</scope>
  52. </dependency>
  53. <dependency>
  54. <groupId>org.projectlombok</groupId>
  55. <artifactId>lombok</artifactId>
  56. <version>1.18.28</version>
  57. </dependency>
  58. <!-- log4j日志-->
  59. <dependency>
  60. <groupId>log4j</groupId>
  61. <artifactId>log4j</artifactId>
  62. <version>1.2.17</version>
  63. </dependency>
  64. <!-- swagger-->
  65. <dependency>
  66. <groupId>io.swagger</groupId>
  67. <artifactId>swagger-annotations</artifactId>
  68. <version>1.5.20</version>
  69. </dependency>
  70. <!-- mybatis-plus-->
  71. <dependency>
  72. <groupId>com.baomidou</groupId>
  73. <artifactId>mybatis-plus-boot-starter</artifactId>
  74. <version>3.5.3.1</version>
  75. </dependency>
  76. <!-- https://mvnrepository.com/artifact/cn.dev33/sa-token-spring-boot3-starter -->
  77. <dependency>
  78. <groupId>cn.dev33</groupId>
  79. <artifactId>sa-token-spring-boot3-starter</artifactId>
  80. <version>1.37.0</version>
  81. </dependency>
  82. </dependencies>
  83. </dependencyManagement>
  84. </project>

编写Eureka服务器:

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  4. </dependency>

yml:

  1. server:
  2. port: 8084
  3. #eureka配置
  4. eureka:
  5. instance:
  6. hostname: locahost
  7. client:
  8. register-with-eureka: false
  9. fetch-registry: false #is false,me is eurekaService,true is not
  10. service-url:
  11. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka

springBoot启动类上加上:

@EnableEurekaServer

将服务注册进来:

  1. <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  5. <version>4.1.0</version>
  6. </dependency>

yml:

  1. server:
  2. port: 8081
  3. spring:
  4. application:
  5. name: cloude-user-server
  6. datasource:
  7. driver-class-name: com.mysql.cj.jdbc.Driver
  8. type: com.alibaba.druid.pool.DruidDataSource
  9. url: jdbc:mysql://192.168.126.128:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
  10. username: root
  11. password: 123456
  12. mybatis-plus:
  13. configuration:
  14. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  15. #eureka配置
  16. # eureka
  17. eureka:
  18. client:
  19. register-with-eureka: true #注册eureka
  20. fetch-registry: true # 获取注册信息
  21. service-url:
  22. defaultZone: http://127.0.0.1:8084/eureka #访问地址,一定得是ip地址和端口号!!!
  23. instance:
  24. prefer-ip-address: true #暴露ip
  25. instance-id: xry #名字
  26. management:
  27. endpoints:
  28. web:
  29. exposure:
  30. include: '*'
  31. jmx:
  32. exposure:
  33. include: '*'
  34. info:
  35. name: qx

启动类加上:

  1. @EnableDiscoveryClient

然后访问Eureka的页面,http://localhost:8084/

未完,待续


本文转载自: https://blog.csdn.net/qx020814/article/details/135586671
版权归原作者 菜汪在路上 所有, 如有侵权,请联系我们删除。

“springCloud使用apache的http类和RestTemplate以及Eureka”的评论:

还没有评论