Spring Cloud 系列(四) Netflix ribbon负载均衡

序号名称链接
1 Spring Cloud 系列(二) 配置中心-Confighttps://blog.csdn.net/qq_38130094/article/details/91456800
2Spring Cloud系列(三) Netflix Eureka注册中心https://blog.csdn.net/qq_38130094/article/details/93992709
3Spring Cloud 系列(四) Netflix ribbon负载均衡https://blog.csdn.net/qq_38130094/article/details/97240915
4Spring Cloud 系列(五) Netflix Hystrixhttps://blog.csdn.net/qq_38130094/article/details/97626558

一 丶 负载均衡

2、Spring Cloud Ribbon

···Spring Cloud Ribbon是基于Http和TCP的客户端负载均衡工具,基于Netflix Ribbon 实现。可以轻松将面向服务的REST模板请求自动转换成客户端负载均衡的服务调用。

两种负载均衡方式:

   Ø 服务端负载均衡

   Ø 客户端负载均衡

2.1Ribbon实现

ribbon 实现负载均衡可以不用注册在Eureka上  使用自己的负载策略

1、客户端依赖:spring-cloud-starter-ribbon

2、new RestTemplate();

3、@LoadBalanced

3. Ribbon 使用(直接让springboot项目是ribbon)

3.1 pom.xml 文件


	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.20.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	
	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Edgware.SR5</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>
	</dependencies>

3.2  启动类


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;


@SpringBootApplication
public class SpringCloudRibbonDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloudRibbonDemoApplication.class, args);
	}

	@Bean
	@LoadBalanced
	public RestTemplate restTemplate(){
		return new RestTemplate();
	}
}

3.3  测试类

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class OrderController {

    private static final List<OrderInfo> list = new ArrayList<OrderInfo>();

    @Autowired
    private RestTemplate restTemplate;

    /***
     * 下单接口 --  调用服务提供者provider /updateProduct 接口
     * @param productName
     * @param num
     * @return
     */
    @GetMapping("/order/{productName}/{num}")
    public String order(@PathVariable("productName") String productName, @PathVariable("num") Integer num){

        if(productName != null && !productName.isEmpty()){

            list.add(new OrderInfo(productName, num));

            // 调用服务提供者
            String result = restTemplate.getForObject("http://eureka-provider/updateProduct/" + productName + "/" + num, String.class);
            return result;
        }

        return null;
    }
}

3.4 application.properties  配置文件

## Eureka服务消费者实例名
spring.application.name=ribbon-consumer
## Eureka服务消费者端口
server.port=9999

## 关闭Actuator验证开关
management.security.enabled=false

## 局部配置-- 单独制定客户端(eureka-provider客户端)
## eureka-provider 和调用时对应
# listOfServers 默认配置项
#127.0.0.1:8070,127.0.0.1:8073  ribbon 负载均衡的ip:port 只是服务的提供者 注册不注册到 Eureka 没有关系
eureka-provider.ribbon.listOfServers=127.0.0.1:8070,127.0.0.1:8073

#下方是全局配置
#ribbon.listOfServers=127.0.0.1:8070,127.0.0.1:8073

4.  Ribbon重试机制

ribbon解析调用地址并负载到ip:port

#指定客户端eureka实例的超时时间

全局配置:

ribbon.connectionTimeout=2000

指定客户端配置:

eurekaServer.ribbon.connectionTimeout=2000

配置格式:<clientName>.<nameSpace>.<propertyName>=<Value>

如果没有配置项<clentName>表示全局配置

详细配置参考:类     com.netflix.client.config.CommonClientConfigKey

 

重试机制:

## 断路器超时时间
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000
## 请求连接超时时间
eurekaClient.ribbon.ConnectTimeout=200
## 请求处理超时时间
eurekaClient.ribbon.ReadTimeout=200
## 对所有操作请求都进行重试
eurekaClient.ribbon.OkToRetryOnAllOperations=true
## 切换实例的重试次数
eurekaClient.ribbon.MaxAutoRetriesNextServer=2
## 对当前实例的重试次数
eurekaClient.ribbon.MaxAutoRetries=1

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值