SpringCloud--Ribbon--使用demo
2021-04-25 01:30
标签:服务提供者 不同 nbsp log demo rowspan stc 物理 提供者 SpringCloud Ribbon是一个基于Http和Tcp的客户端负载工具。 负载均衡可以是服务端负载也可以是客户端负载,服务端负载又可以是物理负载或是软件负载,服务端物理负载:F5,服务端软件负载:Nginx,他们都是在各自下面维护一个可用的服务端清单,通过心跳检测来剔除故障的服务节点以保证清单中都是可以正常访问的服务端节点。 而客户端负载均衡和服务端负载均衡最大的不同点在于上面提到的服务清单所存储的位置。 通过SpringCloud的封装,我们在为服务架构中使用客户端负载均衡调用只需要两步即可: (1)服务提供者只需要启动多个服务实例并注册到注册中心或是多个相关联的服务注册中心 (2)服务消费者直接调用被@LoadBlanced注解修饰过的RestTemplate来实现面向服务的接口调用 具体的使用方法已经在SpringCloud--Eureka--搭建中已经演示,但是在演示中,只演示了一种调用方法,下面就详细介绍一下RestTemplate的几种请求类型 1、get请求 (1)getForEntity函数 getForEntity提供了3个重载方法。 a、重载方法1: 描述:返回对象是ResponseEntity,该对象是对HTTP请求响应的封装,其中主要存储了几个重要的HTTP元素(例如相应状态),其父类HttpEntity中还存储着HTTP请求头对象HttpHeaders及泛型类的请求体对象 样例: 上面例子中,请求的是EUREKA-CLIENT服务中的/v1/hello请求,第二个String.class是调用该方法的返回值类型,后面的多个参数,就是服务后面跟随的入参;如果返回值是一个对象,那么可以使用泛型来处理: 这种是使用的比较多也是比较常见的方法。 b、重载方法2 描述:该方法和上面说的方法基本上一致,只有传参时,上面的方法是用的是多个入参,是用入参顺序匹配占位符,而该方法则是是用的map中的key对应的占位符 样例: c、重载方法3 描述:该方法用于没有入参时是用 样例: (2)getForObject函数 getForObject函数可以理解为对getForEntity的一种封装,获取的直接是Body体内的内容,其余使用方法与getForEntity一致,使用方法也一致。 a、重载方法一 样例: b、重载方法二 样例: c、重载方法三 样例: 2、post请求 (1)postForEntity函数 postForEntity函数和getForEntity一样,有三个重载方法,且使用方法与getForEntity一致 根据上述代码,可以发现,postForEntity函数和getForEntity函数的区别在于多了一个Object request入参,该入参可以是普通的对象,也可以是一个HttpEntity对象,如果request是一个普通对象,requestTemplate会将其转换成一个HttpEntity对象进行调用,而HttpEntity的body即是该request对象;如果该对象是一个HttpEntity对象的话,则可以直接进行调用。 使用样例: (2)postForObject函数 该方法与getForObject函数使用方式一致,区别也是多了一个Object request, 使用样例: (3)postForLocation函数 该类重载方法实现了一POST请求提交资源,并返回新资源地址的URI,且该类函数不需要像前两种函数一样指定返回类型。 使用样例: 3、put put函数也有三个重载方法,所有的put方法都没有返回值,因此入参就没有返回值类型的入参。 使用样例: 4、delete delete函数没有返回值,因此入参没有返回值类型;同样不需要request的body,像get方法一样,直接将参数绑定url即可 使用样例: SpringCloud--Ribbon--使用demo 标签:服务提供者 不同 nbsp log demo rowspan stc 物理 提供者 原文地址:https://www.cnblogs.com/liconglong/p/13260735.html
请求类型
方法
描述
重载方法
get
getForEntity
获取对象为ResponseEntity
getForObject
获取对象为Body体的内容
post
postForEntity
获取对象为ResponseEntity
postForObject
获取对象为Body体的内容
postForLocation
返回值为URI
URI postForLocation(String url, @Nullable Object request, Object... uriVariables)
URI postForLocation(String url, @Nullable Object request, Map
URI postForLocation(URI url, @Nullable Object request)
put
put
没有返回值
void put(String url, @Nullable Object request, Object... uriVariables)
void put(String url, @Nullable Object request, Map
void put(URI url, @Nullable Object request)
delete
delete
没有返回值
void delete(String url, Object... uriVariables)
void delete(String url, Map
void delete(URI url)
ResponseEntity responseEntity = restTemplate.getForEntity("http://EUREKA-CLIENT/v1/hello?name={1}&age={2}",String.class,"demoName",18);
ResponseEntity
Map map = new HashMap
ResponseEntity
UserDto userDto1 = restTemplate.getForObject("http://EUREKA-CLIENT/v1/hello?name={name}&age={age}",UserDto.class,"demoName",18);
UserDto userDto2 = restTemplate.getForObject("http://EUREKA-CLIENT/v1/hello?name={name}&age={age}",UserDto.class,map);
UserDto userDto = restTemplate.getForObject("http://EUREKA-CLIENT/v1/hello",UserDto.class);
//postForEntity使用demo
UserDto userDto3 = new UserDto("demoname","15");
ResponseEntity
String body1 = restTemplate.postForObject("http://EUREKA-CLIENT/v1/hello",userDto3,String.class);
String body2 = restTemplate.postForObject("http://EUREKA-CLIENT/v1/hello?name={name}&age={age}", userDto3, String.class,"demoname","15");
String body3= restTemplate.postForObject("http://EUREKA-CLIENT/v1/hello?name={name}&age={age}", userDto3, String.class, map);
URI postForLocation(String url, @Nullable Object request, Object... uriVariables) throws RestClientException;
URI postForLocation(String url, @Nullable Object request, Map
//postForLocation使用样例
URI uri1 = restTemplate.postForLocation("http://EUREKA-CLIENT/v1/hello",userDto3);
URI uri2 = restTemplate.postForLocation("http://EUREKA-CLIENT/v1/hello?name={name}&age={age}", userDto3, "demoname","15");
URI uri3= restTemplate.postForLocation("http://EUREKA-CLIENT/v1/hello?name={name}&age={age}", userDto3, map);
void put(String url, @Nullable Object request, Object... uriVariables) throws RestClientException;
void put(String url, @Nullable Object request, Map
//put使用样例
restTemplate.put("http://EUREKA-CLIENT/v1/hello",userDto3);
restTemplate.put("http://EUREKA-CLIENT/v1/hello?name={name}&age={age}",userDto3,UserDto.class,"demoname","15");
restTemplate.put("http://EUREKA-CLIENT/v1/hello?name={name}&age={age}",userDto3,UserDto.class,map);
void delete(String url, Object... uriVariables) throws RestClientException;
void delete(String url, Map
//delete使用样例
restTemplate.delete("http://EUREKA-CLIENT/v1/hello");
restTemplate.delete("http://EUREKA-CLIENT/v1/hello","demoname","15");
restTemplate.delete("http://EUREKA-CLIENT/v1/hello",map);
下一篇:向方法中传递数组。
文章标题:SpringCloud--Ribbon--使用demo
文章链接:http://soscw.com/index.php/essay/79198.html