一、在springcloud中,消费方的配置文件里配上服务提供方的地址
提供方的controller的方法,
在消费方的controller写如下的方法,通过创建一个restTemplate来访问提供方的rest()方法,返回json字符串
//提供方的ip,端口
@Value("${provider.address}")
private String provider;
@RequestMapping("/service")
public String service(){
//远程调用
RestTemplate restTemplate=new RestTemplate();
String object = restTemplate.getForObject(provider+"/service", String.class);
return "consumer/"+object;
}
二、在nacos注册服务,消费方通过负载均衡调用提供方,
//服务注册名字
private String servletName="nacos-provider";
//通过负载均衡发现地址
@Autowired
private LoadBalancerClient loadBalancerClient;
@RequestMapping("/service")
public String service(){
//远程调用
RestTemplate restTemplate=new RestTemplate();
//发现地址
ServiceInstance serviceInstance = loadBalancerClient.choose(servletName);//初始化服务
URI uri = serviceInstance.getUri();//得到服务的uri地址
// System.out.println("uri = " + uri);
String object = restTemplate.getForObject(uri+"/service", String.class);//访问提供方
// System.out.println("object = " + object);
return "consumer/"+object;
}
三、写上提供方的访问路径,也能成功访问。
@RequestMapping("/service")
public String service(){
//远程调用
RestTemplate restTemplate=new RestTemplate();
String object = restTemplate.getForObject("http://localhost:57020/service", String.class);
return "consumer/"+object;
}
当然,我们也可以编写一个带有@Configuraction注解的RestTemplateConfig类,编写一个返回RestTemplate的方法,加上@Bean将RestTemplate注册在spring Ioc,如:
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
这样,在controller中就不用再创建一个RestTemplate,而是在controller中注入RestTemplate,像这样
@Autowired
private RestTemplate restTemplate;
以上这三个例子,主要是能拿到访问提供方的地址,再由restTemplate来调用接口,接收返回值。