知识点:
1.String.format("http://%s:%s/sayHi",instance.getHost(),instance.getPort());
2.log.info("url is {}",target);
3.@Bean注解,spring会在初始化的时候会把这个方法加入到上下文,然后我们就可以在Controller里得到这个方法了
1. 启动类
package com.imooc.springcloud;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaConsumerApplication {
/*
* @Bean注解,spring会在初始化的时候会把这个方法加入到上下文,然后我们就可以在Controller里得到这个方法了
* */
@Bean
public RestTemplate register(){
return new RestTemplate();
}
public static void main(String[] args) {
new SpringApplicationBuilder(EurekaConsumerApplication.class)
.web(WebApplicationType.SERVLET)
.run(args);
}
}
2. Controller服务调用流程
业务流程:
1.拿到服务提供者的实例
2.借助RestTemplate发起真实的服务调用
3.单独声明RestTemplate
4.启动顺序:启动注册中心->服务提供者->服务消费者
5.调用消费者接口(服务消费者会调用服务提供者)
package com.imooc.springcloud;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@Slf4j
@RestController
public class Controller {
/*
* 负载均衡器,帮我们从注册中心拉取的服务列表中挑选一个可用的serviceprovider
* */
@Autowired
private LoadBalancerClient client;
@Autowired
private RestTemplate restTemplate;
@GetMapping("/hello")
public String hello(){
/*
* 1.拿到服务提供者的实例
* 2.借助RestTemplate发起真实的服务调用
* 3.单独声明RestTemplate
* */
ServiceInstance instance = client.choose("eureka-client");
/*
* 防疫性编程:假定所有的输入都是不安全的,instance可能get到空
* */
if (instance == null) {
return "No aviliable instance";
}
String target = String.format("http://%s:%s/sayHi",instance.getHost(),instance.getPort());
log.info("url is {}",target);
return restTemplate.getForObject(target, String.class);
}
@PostMapping("/hello")
public Friend helloPost(){
/*
* 1.拿到服务提供者的实例
* 2.借助RestTemplate发起真实的服务调用
* 3.单独声明RestTemplate
* 4.启动顺序:启动注册中心->服务提供者->服务消费者
* */
ServiceInstance instance = client.choose("eureka-client");
/*
* 防疫性编程:假定所有的输入都是不安全的,instance可能get到空
* */
if (instance == null) {
return null;
}
String target = String.format("http://%s:%s/sayHi",instance.getHost(),instance.getPort());
log.info("url is {}",target);
Friend friend = new Friend();
friend.setName("eureka-consumer");
return restTemplate.postForObject(target, friend,Friend.class);
}
}
3. Entry
package com.imooc.springcloud;
import lombok.Data;
@Data
public class Friend {
private String name;
private String port;
}
网友评论