修改payment8001的Controller
/**
* 支付控制层
*/
@Slf4j
@RestController
public class PaymentController {
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/payment/discovery")
public Object discovery(){
// 获取所有微服务信息
List<String> services = discoveryClient.getServices();
for (String service : services) {
log.info("server:={}",service);
}
return this.discoveryClient;
}
}
RestTemplate介绍
RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。
在配置类中的restTemplate添加@LoadBalanced注解
这个注解会 给这个组件 有负载均衡的功能
@Configuration
publicclassCloudConfig{
@LoadBalanced
@Bean
publicRestTemplaterestTemplate(){
returnnewRestTemplate();
}
}
修改payment8001工程controller
@Slf4j
@RestController
@RequestMapping("/payment")
public class PaymentController {
@GetMapping("/index")
public String index(){
return "payment + successs";
}
}
编写order80工程Controller
@RestController
@RequestMapping("/order")
public class OrderController {
// HTTP 请求工具
@Autowired
private RestTemplate restTemplate;
/**
* 测试服务发现接口
* @return
*/
@GetMapping("/index")
public String index(){
//1.远程调用方法的主机
//Stringhost="http://localhost:1000";
//将远程微服务调用地址从"IP地址+端口号改成"微服务名称""
String host = "http://cloud-payment-provider";
// 2. 远程调用方法具体URL地址
String url = "/payment/index";
// 3. 发起远程调用
//getForObject:返回响应体中数据转化成的对象,可以理解为json
//getForEntity:返回的是ResponseEntity的对象包含了一些重要的信息
String forObject = restTemplate.getForObject(host + url, String.class);
return forObject;
}
}