Sprignboot服务之间通讯的两种Httprestful形式的调用

Sprignboot服务之间通讯的两种Httprestful形式的调用

1:使用springboot提供的RestTemplate对象。(类似于HttpClient)

--用法1

RestTemplate template = new RestTemplate();

//get请求

String response = Template.getForObject(url,String.class); //String.class为返回值的类型

//post请求

String response = Template.postForObject(url,Object param,String.class); //String.class为返回值的类型

缺点:请求地址写死了,扩展性较差,且在集群环境中无法做到负载均衡。

--用法2

使用SpringCloud提供的LoadBanlenceClient.基于用法1

@Resource

private LoadBanlenceClient loadBanlence; //注入LoadBanlenceClient对象

ServerInstance instance = loadBanlence. //通过loadBanlenceClient获取一个服务实例(针对集群环境,解决了用法1的缺点)

String host = instance.getHost();  //通过实例获取主机ip

String port = instance.getPort();  //获取端口

====接下来就结合用法1来实现====

String url = String.format("http://%s:%s/uri",host,port);//通过ip和端口构造url,uri为你需要调用的服务uri

String response = restemplate.getForObject("url",String.class);

终极写法

写一个restemplate的配置

@Configure

public RestTemplateConfig{

@Bean

@LoadBanlence

public RestTemplate getTemplate(){

      return new RestTemplate();

}

}

直接注入RestTemplate即可

2:使用SpringCloud提供的feign组件

--用法:接口加注解

@Feign("服务名称")

public interface Client{

@GetMapping("/getUserInfo")//对应目标接口的请求方式和映射路径

String getUserInfo(@RequestParam("id") String id);//String 为目标接口的返回值类型,getUserInfo名称任意,id为目标接口需要的参数

}

 

 

你可能感兴趣的:(springBoot)