ParseServiceClient.java 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package cn.com.yusys.consumer.util;
  2. import cn.com.yusys.consumer.model.Task;
  3. import cn.com.yusys.consumer.util.response.ExecuteResponse;
  4. import cn.com.yusys.consumer.util.response.InstanceStatusResponse;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.http.HttpStatus;
  7. import org.springframework.http.MediaType;
  8. import org.springframework.stereotype.Component;
  9. import org.springframework.web.reactive.function.client.WebClient;
  10. import org.springframework.web.reactive.function.client.WebClientResponseException;
  11. import reactor.core.publisher.Mono;
  12. /**
  13. * 解析服务实例实例接口调用工具
  14. */
  15. @Slf4j
  16. @Component
  17. public class ParseServiceClient {
  18. private final WebClient webClient;
  19. // 通过构造函数注入WebClient.Builder,利用Spring自动配置
  20. public ParseServiceClient(WebClient.Builder webClientBuilder) {
  21. this.webClient = webClientBuilder
  22. .codecs(config -> config.defaultCodecs().maxInMemorySize(1024 * 1024))
  23. .build();
  24. }
  25. /**
  26. * 调用/execute接口执行任务
  27. * @param taskData 任务数据
  28. * @return 执行结果响应
  29. */
  30. public ExecuteResponse executeTask(Task taskData) {
  31. String executeUrl = "http://127.0.0.1:8083//api/manager/parse";
  32. try {
  33. ExecuteResponse response = webClient.post()
  34. .uri(executeUrl)
  35. .contentType(MediaType.APPLICATION_JSON)
  36. .bodyValue(taskData)
  37. .retrieve()
  38. .onStatus(HttpStatus::isError, clientResponse ->
  39. Mono.error(new WebClientResponseException(
  40. "执行接口返回异常状态码",
  41. clientResponse.statusCode().value(),
  42. clientResponse.statusCode().getReasonPhrase(),
  43. null, null, null)))
  44. .bodyToMono(ExecuteResponse.class)
  45. .timeout(java.time.Duration.ofSeconds(30))
  46. .block();
  47. if (response != null && 200 == response.getCode()) {
  48. log.debug("任务执行成功,响应:{}", response);
  49. return response;
  50. } else {
  51. log.warn("任务执行返回失败,响应:{}", response);
  52. return createErrorResponse("接口返回非200响应");
  53. }
  54. } catch (WebClientResponseException e) {
  55. log.error("任务执行失败,HTTP状态码:{}", e.getRawStatusCode(), e);
  56. return createErrorResponse(String.format("HTTP请求失败,状态码:%d", e.getRawStatusCode()));
  57. } catch (Exception e) {
  58. log.error("任务执行异常", e);
  59. return createErrorResponse(e.getMessage());
  60. }
  61. }
  62. /**
  63. * 创建错误响应
  64. * @param errorMessage 错误消息
  65. * @return ExecuteResponse 错误响应
  66. */
  67. private ExecuteResponse createErrorResponse(String errorMessage) {
  68. ExecuteResponse response = new ExecuteResponse();
  69. response.setCode(500);
  70. response.setMessage(errorMessage);
  71. return response;
  72. }
  73. }