千家信息网

SpringCloud之Ribbon

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,【前面的话】书接上文,本文的某些知识依赖我的上一篇文章:SpringCloud之Eureka,如果没有看过可以先移步去看一下。另外在微服务架构中,业务都会被拆分成一个个独立的服务,服务与服务的通讯是基
千家信息网最后更新 2025年01月23日SpringCloud之Ribbon

前面的话】书接上文,本文的某些知识依赖我的上一篇文章:SpringCloud之Eureka,如果没有看过可以先移步去看一下。另外在微服务架构中,业务都会被拆分成一个个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。在这一篇文章首先讲解下基于ribbon+rest。


壹、Ribbon简介

  • ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。

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

IClientConfig ribbonClientConfig: DefaultClientConfigImpl

IRule ribbonRule: ZoneAvoidanceRule

IPing ribbonPing: NoOpPing

ServerList ribbonServerList: ConfigurationBasedServerList

ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter

ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer

# 贰、准备工作- 新建一个ribbon子工程**lovin-ribbon-client**,用于后面的操作。下面是主要的pom依赖~~~pom        lovincloud        com.eelve.lovincloud        1.0-SNAPSHOT        4.0.0    lovin-ribbon-client    jar    ribbonclient    0.0.1    ribbon的client                        org.springframework.cloud            spring-cloud-starter-netflix-eureka-client                            org.springframework.boot            spring-boot-starter-security                            org.springframework.boot            spring-boot-starter-web                            org.springframework.cloud            spring-cloud-starter-netflix-ribbon                                                    org.springframework.boot                spring-boot-maven-plugin                        
  • 这里为了安全,我这里还是添加spring-boot-starter-security
    server:port: 8805   # 服务端口号spring:application:name: lovinribbonclient     # 服务名称security:basic:  enabled: trueuser:  name: lovin  password: ${REGISTRY_SERVER_PASSWORD:lovin}eureka:client:serviceUrl:  defaultZone: http://lovin:lovin@localhost:8881/eureka/   # 注册到的eureka服务地址
  • 配置spring-boot-starter-security,这里为了方便我这里放开所有请求
    package com.eelve.lovin.cofig;

import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**

  • @ClassName SecurityConfig
  • @Description TDO
  • @Author zhao.zhilue
  • @Date 2019/8/16 14:12
  • @Version 1.0**/
    @Configuration
    br/>**/
    @Configuration

    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().anyRequest().permitAll()
    .and().csrf().disable();
    }
    }

    - 然后向程序的ioc容器中注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。~~~javapackage com.eelve.lovin;

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

/**

  • @ClassName LovinRibbonClientApplication
  • @Description TDO
  • @Author zhao.zhilue
  • @Date 2019/8/15 16:59
  • @Version 1.0**/
    @SpringBootApplication
    br/>**/
    @SpringBootApplication

    public class LovinRibbonClientApplication {

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

    @Bean@LoadBalanced
    br/>@LoadBalanced

    return new RestTemplate();
    }
    }

    - 然后编写一个**HelloService**~~~javapackage com.eelve.lovin.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**

  • @ClassName HelloService
  • @Description TDO
  • @Author zhao.zhilue
  • @Date 2019/8/15 17:02
  • @Version 1.0**/
    @Service
    br/>**/
    @Service

    br/>@Autowired

    public String getHello() {
    //这里的lovineurkaclient是我上一篇文章新建的eureka客户端的名称
    return restTemplate.getForObject("http://lovineurkaclient/hello",String.class);
    }
    }

    - 再编写一个**HelloController**~~~javapackage com.eelve.lovin.controller;

import com.eelve.lovin.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**

  • @ClassName HelloController
  • @Description TDO
  • @Author zhao.zhilue
  • @Date 2019/8/15 17:05
  • @Version 1.0**/
    @RestController
    br/>**/
    @RestController

    @Autowired
    HelloService helloService;

    @RequestMapping("hello")
    public String hello(){
    return helloService.getHello();
    }
    }

    # 叁、启动测试- 依次启动eureka的服务端和两个客户端,以及新建的lovin-ribbon-client![我们可以看到服务已经全部启动成功](https://i.loli.net/2019/08/23/pa1X8eByNhltP4C.png)我们可以看到服务已经全部启动成功- 然后访问http://localhost:8805/hello![我们可以看到已经可以通过ribbon调到我们建立的eureka客户端了](https://i.loli.net/2019/08/23/TXoNiuvYhGO9Hc3.png)我们可以看到已经可以通过ribbon调到我们建立的eureka客户端了- 再次请求接口观察返回![我们可以看到我们调到了通过ribbon负载的另外一个接口](https://i.loli.net/2019/08/23/o9Cm2LgBXb4qjF5.png)我们可以看到我们调到了通过ribbon负载的另外一个接口了,到这里我们就已经弄好了一个简单的ribbon负载。

肆、网络架构

  • 我们可以看到我们调用的服务不再是像再上一篇文章中的直接访问对应的服务,而是通过Ribbon的负载均衡的去调用的,而且这里说明一点,Ribbon的默认机制是轮询。

  • 最后的最后是本博客的源码,欢迎关注这一套SpringCloud的实践
服务 客户 客户端 篇文章 均衡 接口 上一 成功 可以通过 名称 架构 配置 安全 上文 业务 两个 再次 功能 博客 口号 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中资源数据库安全吗 华为服务器管理口raid 软件开发项目管理概述 医院数据库安全方案 云信互联网科技有限公司 御龙在天服务器维护中启动失败 校园网采用的网络技术 网络安全的考研 小米风筝守护服务器异常什么意思 重庆众福互联网科技有限公司 落实网络安全体系建设 数据库评价指标 电网网络安全典型案例 遥感常用的影像数据库 华为云企业购买云服务器流程 吉利软件开发待遇 广西省中小学生网络安全教育 软件开发的公司怎么注册 如何用数据库更新学生表 开通京东白条服务器繁忙 前端开发和软件开发哪个好学 uos服务器开虚拟化 黄石市网络安全宣传周答题 网络安全手报抄报内容写什么 自学软件开发能学会吗 市场上的网络安全设备厂家 数据库原理课程设计课程小结 数据库技术技巧组合 施耐德变屏器服务器 跟谁学软件开发培训
0