【Spring Cloud 系列】四、负载均衡(Ribbon)(Hoxton.M3 版本)

举报
小阿杰· 发表于 2022/01/25 22:04:02 2022/01/25
【摘要】 环境:IDEAJDK1.8Spring Cloud Hoxton.M3Spring Boot 2.2.0 一、Ribbon简介  Spring Cloud Ribbon是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。Feign默认集成了Ribbon。它是一个工具类框架,不像服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个微服务...

环境:

IDEA
JDK1.8
Spring Cloud Hoxton.M3
Spring Boot 2.2.0

一、Ribbon简介

  Spring Cloud Ribbon是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。Feign默认集成了Ribbon。它是一个工具类框架,不像服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中。微服务间的调用,API网关的请求转发等,都是通过Ribbon来实现的,包括后面要介绍的Feign,也是基于Ribbon实现的工具。

Ribbon已经默认实现了这些配置bean:

  • IClientConfig ribbonClientConfig: DefaultClientConfigImpl
  • IRule ribbonRule: ZoneAvoidanceRule
  • IPing ribbonPing: NoOpPing
  • ServerList ribbonServerList: ConfigurationBasedServerList
  • ServerListFilter
  • ribbonServerListFilter: ZonePreferenceServerListFilter
  • ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer

二、创建项目

1.File ----- New -----Project

1.jpg

2.Spring Initializr ----- Next

2.jpg

3.等待创建项目中

3.jpg

4.输入 Group 和 Artifact 点击 Next

4.jpg

5.选择 Spring Cloud Routing ----- Ribbon 点击 Next

5.jpg

6.点击 Finish 创建完成

6.jpg

三、完善项目

1.引入补充的依赖 ribbon依赖和eureka依赖

<!--eureka-client-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    <!--eureka ribbon-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
<!--springboot web-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

2.添加启动注解信息

@EnableEurekaClient

package cn.mcus;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class RibbonserverApplication {
  public static void main(String[] args) {
    SpringApplication.run(RibbonserverApplication.class, args);
  }

3.添加RestTemplate

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

4.添加配置文件信息

server.port=8764
spring.application.name=RibbtonServer
#注册到服务中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#是否注册到eureka服务器,
eureka.client.registerWithEureka=true 
#是否从eureka服务器获取注册信息
eureka.client.fetchRegistry=true
#是否开启自我保护模式,默认为true。
eureka.server.enable-self-preservation=true

5.编写Controller

@RestController
public class RibbonController {
    @Autowired
    private RibbonService ribbonService;
    @RequestMapping("getRibbon")
    public String getRibbon(String name){
        String company = ribbonService.getRibbon(name);
        return company;
    }

}

6.编写Service

public interface RibbonService {
    String getRibbon(String name);
}

7.编写ServiceImpl


@Service
public class RibbonServiceImpl implements RibbonService {
    @Autowired
    private RestTemplate restTemplate;
    @Override//程序名替代服务地址,ribbon会根据服务名自动选择服务实例
    public String getRibbon(String name) {
        String result = restTemplate.getForObject("http://Client-Server1/test?name=" + name, String.class);
        return result;
  }

四、启动项目

1.依次启动

EurekaServer
ClientServer1
ClientServer2
RibbonServer
四个项目

7.png

2.在浏览器中输入:http://localhost:8761/ 出现如下页面

8.jpg

  红框代表服务都注册到Eureka 服务中。端口分别为8762,8763,8764

3.在浏览器中输入Ribbon 服务的地址:

9.png

10.png
  再次点击刷新:端口号为8762,8763,8764

  这说明当我们通过调用restTemplate.getForObject()方法时,已经做了负载均衡,访问了不同的端口的服务实例。

五、负载均衡架构

11.png
  1.一个服务注册中心,EurekaServer端口为8761ClientServer1、ClientServer2、RibbonServer三个实例端口分别为8762,8763,8764,向服务注册中心注册。

  2.当RibbonServer通过RestTemplate调用ClientServer1的接口时,因为用Ribbon进行了负载均衡,会轮流的调用ClientServer8762和8763 两个端口的服务接口。

结语

好了,以上就是Spring Cloud 负载均衡(Ribbon)介绍,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。
  作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】欢迎关注阅读交流。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。