springcloud中ribbon客户端负载均衡

时间:2020-05-09
本文章向大家介绍springcloud中ribbon客户端负载均衡,主要包括springcloud中ribbon客户端负载均衡使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、配置

主流的LB方案可分成两类:

  一种是集中式LB, 即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;

   另一种是进程内LB,将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。Ribbon就属于后者,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
@Configuration
public class EurekaRibbonConfig {
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

重试机制

spring:
  application:
    name: cloud-ribbon
#hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
#断路器的超时时间需要大于Ribbon的超时时间,不然不会触发重试
@ConfigurationProperties("spring.cloud.loadbalancer.retry")
public class LoadBalancerRetryProperties {
    //开启重试机制
    private boolean enabled = true;
}

RestTemplate详解

Get请求

第一种:getForEntity函数

<T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... uriVariables)
url为请求地址,responseType为请求响应body的包装类型,uriVariables为url中的参数绑定 比如:
http://USER-SERVICE/user?name={1}
<T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables)
url为请求地址,responseType为请求响应body的包装类型,uriVariables为url中的参数绑定 需要在占位符中指定Map中参数的key值,比如:
http://USER-SERVICE/user?name={name}
<T> ResponseEntity<T> getForEntity(URI url, Class<T> responseType)
 url为JDK java.net包下

第二种;getForObject函数

<T> T getForObject(String url, Class<T> responseType, Object... uriVariables)
url为请求地址,responseType为请求响应body的包装类型,uriVariables为url中的参数绑定 比如:
http://USER-SERVICE/user?name={1}
<T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables)
url为请求地址,responseType为请求响应body的包装类型,uriVariables为url中的参数绑定 需要在占位符中指定Map中参数的key值,比如:
http://USER-SERVICE/user?name={name}
<T> T getForObject(URI url, Class<T> responseType)
   url为JDK java.net包下

POST请求

第一种:postForEntity函数

 <T> ResponseEntity<T> postForEntity(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables)
  大部分和getForEntity一致,request可以是一个普通对象,也可以是一个HttpEntity对象,若一个普通对象,非HttpEntity对象,将会把请求对象转换为一个HttpEntity对象来处理;若是一个HttpEntity对象,当成一个完成的HTTP请求对象来处理,不仅包含body,还有header
<T> ResponseEntity<T> postForEntity(String url, @Nullable Object request, Class<T> responseType, Map<String, ?> uriVariables)
<T> ResponseEntity<T> postForEntity(URI url, @Nullable Object request, Class<T> responseType)

第二种:postForObject函数

<T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables)
  跟getForObject类似
  <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Map<String, ?> uriVariables)
<T> T postForObject(URI url, @Nullable Object request, Class<T> responseType)

第三种:postForLocation函数

URI postForLocation(String url, @Nullable Object request, Object... uriVariables)
返回新资源的URI
URI postForLocation(String url, @Nullable Object request, Map<String, ?> uriVariables)
URI postForLocation(URI url, @Nullable Object request)

PUT请求

void put(String url, @Nullable Object request, Object... uriVariables)
void put(String url, @Nullable Object request, Map<String, ?> uriVariables)
void put(URI url, @Nullable Object request)
 没有返回内容

DELETE请求

void delete(String url, Object... uriVariables)
void delete(String url, Map<String, ?> uriVariables)
void delete(URI url)

原文地址:https://www.cnblogs.com/mufeng07/p/12859165.html