content: package com.george.springcloud.controller;
  
  import com.george.springcloud.entities.CommonResult;
  import com.george.springcloud.entities.Payment;
  import com.george.springcloud.lb.MyLoadBalancer;
  import lombok.extern.slf4j.Slf4j;
  import org.springframework.cloud.client.ServiceInstance;
  import org.springframework.cloud.client.discovery.DiscoveryClient;
  import org.springframework.http.ResponseEntity;
  import org.springframework.web.bind.annotation.*;
  import org.springframework.web.client.RestTemplate;
  
  import javax.annotation.Resource;
  import java.net.URI;
  import java.util.List;
  
  /**
   * @author Yang Hao
   * @description
   * @date 2020-09-14 16:51
   */
  @RestController
  @Slf4j
  public class OrderController {
  
      //        public static final String PAYMENT_URL = "http://localhost:8001";
      //集群负载均衡
      public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
      @Resource
      private RestTemplate restTemplate;
      @Resource
      private MyLoadBalancer myLoadBalancer;
      @Resource
      private DiscoveryClient discoveryClient;
  
      @PostMapping(value = "/consumer/payment/create")
      public CommonResult<Payment> create(@RequestBody Payment payment) {
          return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
      }
  
      @GetMapping("/consumer/payment/get/{id}")
      public CommonResult<Payment> getPayment(@PathVariable("id") Long id) {
          return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
      }
  
      @GetMapping("/consumer/payment/getForEntity/{id}")
      public CommonResult<Payment> getPaymentEntity(@PathVariable("id") Long id) {
          ResponseEntity<CommonResult> entity = restTemplate.getForEntity(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
  
          if (entity.getStatusCode().is2xxSuccessful()) {
              return entity.getBody();
          } else {
              return new CommonResult<>(444, "操作失败");
          }
      }
  
      @GetMapping(value = "/consumer/payment/lb")
      public String getPaymentLB() {
          List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
  
          if (instances == null || instances.size() <= 0) {
              return null;
          }
          ServiceInstance serviceInstance = myLoadBalancer.instances(instances);
          URI uri = serviceInstance.getUri();
          return restTemplate.getForObject(uri + "/payment/lb", String.class);
      }
  
      /**
       * P94用,sleuth+zipkin链路监控使用
       *
       * @return
       */
      @GetMapping("/consumer/payment/zipkin")
      public String paymentZipkin() {
          String result = restTemplate.getForObject("http://localhost:8001" + "/payment/zipkin/", String.class);
          return result;
      }
  }
  