Spring Cloud Ribbon负载均衡

Ribbon其实就是平常使用的Nginx差不多的,还有LVS等。负载均衡的也有硬件,比如F5等,但是F5,一个字:贵,动辄就是几十万,一般的中小型公司承受不起,曾经的中国移动就是用的F5

LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。

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

      进程内LB:将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。偏软件,比如Ribbon

Spring Cloud中的负载均衡算法甚至是可以自定义的,意思除了自带的,我们可以自己写负载均衡的算法

 

接着之前的Eureka集群来:

注意:如果是本机有可能电脑撑不住,CPU会占用很多了。

先看下项目结构:

配置Ribbon:

插播一段很重要的话:Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具

客户端、客户端、客户端,所以我们Ribbon是配置在application80这个消费者微服务客户端的。目前消费者80这个微服务客户端还没有注册到Eureka的

一步一步来:

配置80消费者微服务客户端的负载均衡:

pom.xml改造:

添加依赖:

<!-- Ribbon相关 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<!--Ribbon需要和eureka整合,依赖不是eureka-server,说明这是Eureka的客户端,即微服务,也是需要注册进Eureka 
				Server的 -->
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-ribbon</artifactId>
		</dependency>
		<!-- eureka需要config -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>

最终的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.ypp.springcloud</groupId>
		<artifactId>yppcloud</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<artifactId>yppcloud-consumer-dept-80</artifactId>
	<description>部门微服务消费者</description>

	<dependencies>
		<!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->
		<dependency>
			<groupId>com.ypp.springcloud</groupId>
			<artifactId>yppcloud-api</artifactId>
			<version>${project.version}</version>
		</dependency>

		<!-- Ribbon相关 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<!--Ribbon需要和eureka整合,依赖不是eureka-server,说明这是Eureka的客户端,即微服务,也是需要注册进Eureka 
				Server的 -->
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-ribbon</artifactId>
		</dependency>
		<!-- eureka需要config -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- 修改后立即生效,热部署 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>springloaded</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
	</dependencies>
</project>

接着配置application.yml,既然这个80也是Eureka中的一个客户端,那么这个微服务也是需要注册到Eureka Server的

添加配置:

eureka:
  client: #客户端注册进eureka服务列表内
    service-url: 
       defaultZone: http://eureka2001.com:2001/eureka/,http://eureka2002.com:2002/eureka/,http://eureka2003.com:2003/eureka/

最终80的application.yml:

server:
  port: 80
  
eureka:
  client: #客户端注册进eureka服务列表内
    service-url: 
       defaultZone: http://eureka2001.com:2001/eureka/,http://eureka2002.com:2002/eureka/,http://eureka2003.com:2003/eureka/

将restTemplate自带负载均衡,添加@LoadBalanced注解:

80远程调用服务端微服务自带负载均衡配置的RestTemplate:

package com.ypp.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ConfigRest {

	@Bean(name = "restTemplate")
	@LoadBalanced
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}
}

80也是Eureka的服务,在启动类添加@EnableEurekaClient

现在回头来看之前部署的Eureka Server集群:

之前调用的是localhost:xxxxx地址,现在我们要实现真正的微服务,调用微服务的名字:YPPCLOUD-DEPT

启动Eureka集群和服务的提供者8001、服务的消费者/客户端80,然后调用8001服务端微服务,现在是真正的微服务调用

到现在电脑内存越来越高了,注意电脑配置:

  本机的话有部分可能会撑到8G左右

 

下面重点来了,也是验证负载均衡。现在只有一个提供服务的微服务。

那现在我们创建多个能提供服务的微服务,多个8001的这种微服务。每个微服务可以有自己每个独立的数据库,所以再继续创建自己独立的数据库。注意电脑配置

创建多个数据库和创建多个项目略过..配置文件也是一样的。更改端口、数据库和instance-id就行。

启动2001/2002/2003/8001/8002/8003/80  

打开Eureka Server页面看节点信息:

一个微服务下面挂了3个实例。测试负载均衡

访问了3次,每个实例都访问了一次,按照默认轮训的算法每个微服务访问一次。用了@LoadBalanced这个东东就带了负载均衡

 

最终源码地址:https://pan.baidu.com/s/1Vy88GqJhO3KfVX5HgV_m9Q  提取码:z1j6

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值