SpringCloud |第二篇: 服务消费者(Ribbon)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、Ribbon简介

    Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

二、准备工作

    这一篇文章基于上一篇文章的工程,启动eureka-server 工程;启动user-service工程,它的端口为8084;将user-service的项目复制出来一个将其名称修改为user-service1,配置文件的端口改为8085.

113323_eYOy_2940767.png 113349_uV3P_2940767.png

113221_KIPa_2940767.png 113243_Jrjg_2940767.png

启动,这时你会发现:user-service在eureka-server注册了2个实例,这就相当于一个小的集群。访问localhost:1001如图所示:

113523_vLjg_2940767.png

三、建一个服务消费者(Ribbon)

    重新新建一个工程,取名为:da-ribbon-service; 

113939_Tk8h_2940767.png

    在它的pom.xml文件分别引入起步依赖spring-boot-starter-web,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<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><groupId>com.example</groupId><artifactId>da-ribbon-server</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>da-ribbon-server</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.M8</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>

    在工程的配置文件指定服务的注册中心地址为http://localhost:1001/eureka/,程序名称为 ribbon-service,程序端口为2001。配置文件application.yml如下:

eureka:client:serviceUrl:defaultZone: http://localhost:1001/eureka/instance:lease-renewal-interval-in-seconds: 30
server:port: 2001
spring:application:name: ribbon-service

    在工程的启动类中,通过@EnableEurekaClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

@EnableEurekaClient
@SpringBootApplication
public class DaRibbonServerApplication {public static void main(String[] args) {SpringApplication.run(DaRibbonServerApplication.class, args);}@Bean@LoadBalancedRestTemplate restTemplate(){return restTemplate();}
}

写一个测试类HelloService,通过之前注入ioc容器的restTemplate来消费service-hi服务的“/hi”接口,在这里我们直接用的程序名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名,代码如下:

@Service
public class HelloService {@AutowiredRestTemplate restTemplate;public String getHello(String name){return restTemplate.getForObject("http://user-service/hi?name="+name,String.class);}
}

写一个controller,在controller中用调用HelloService 的方法,代码如下:

@RestController
public class HiController {@AutowiredHelloService helloService;@RequestMapping("/hi")public String hi(@RequestParam String name){return helloService.getHello(name);}
}

在浏览器上多次访问http://localhost:2001/hi?name=zhangsan,浏览器交替显示:

135210_fUhV_2940767.png

135222_bkJJ_2940767.png

这说明当我们通过调用restTemplate.getForObject("http://user-service/hi?name="+name,String.class)方法时,已经做了负载均衡,访问了不同的端口的服务实例。

四、此时的架构

  • 一个服务注册中心,eureka-server,端口为1001
  • user-service跑了两个工程实例,端口分别为8084,8085,分别向服务注册中心注册
  • ribbon-sercvice端口为2001,向服务注册中心注册
  • 当ribbon-sercvice通过restTemplate调用user-service的hi接口时,因为用ribbon进行了负载均衡,会轮流的调用user-service:8084和8085 两个端口的hi接口;

五、源码下载

    RibbonServer源码下载:https://gitee.com/Clarences/Ribbon-Service

    UserServer1源码下载:https://gitee.com/Clarences/User-server1

转载于:https://my.oschina.net/Clarences/blog/1635795

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库审计

启用一个专用的审计日志&#xff08;Audit Log&#xff09;将用户对数据库的所有操作记录在上面。审计员利用审计日志监控数据库中的各种行为&#xff0c;找出非法存取数据的人、时间和内容。 审计很费时间和空间 DBA可以根据应用对安全性的要求&#xff0c;灵活地打开或关闭…

北海市计算机等级考试,2021上半年北海市计算机二级报名时间|网上报名入口【已开通】...

&nbsp&nbsp[导读]:2021上半年北海市计算机二级报名时间|网上报名入口【已开通】&#xff0c;更多广西等级考试报名时间、考试时间以及考试模拟试题&#xff0c;请访问易考吧广西等级考试栏目2021上半年北海市计算机二级报名时间|网上报名入口【已开通】一、报名时间网上…

Java实体对象为什么一定要实现Serializable接口呢?

文章目录Java对象为什么要实现Serializable接口&#xff1f;Serializable接口概述Java对象为什么要实现Serializable接口&#xff1f; 最近这段时间一直在忙着编写Java业务代码&#xff0c;麻木地搬着Ctrl-C、Ctrl-V的砖&#xff0c;在不知道重复了多少次定义Java实体对象时“…

C3P0连接池工具类使用

c3p0的基本连接配置文件 c3p0-config.xml <c3p0-config><default-config><property name"driverClass">com.mysql.jdbc.Driver</property><property name"jdbcUrl">jdbc:mysql:///mybase</property><property name…

项目经理常见的沟通坏习惯

沟通失败有很多原因&#xff0c;每个项目经理都必须熟悉这些原因、了解其中的行为、并且有责任避免沟通失败的发生。在一些团队中&#xff0c;会产生失败的沟通、失败的项目是因为团队经理本身的坏习惯行为或者他本人容忍组员有些行为&#xff0c;而这些行为和坏习惯无意中会导…

Android屏幕适配

Android屏幕适配一直是Android开发们的一个痛点&#xff0c;各种各样的屏幕分辨率等&#xff0c;对Android的屏幕适配带来了很大的麻烦&#xff0c;而谷歌的解决方案也并不被所有人满意&#xff0c;所以笔者结合Android官方文档&#xff0c;来谈谈这个话题。 术语和基本概念 本…

万维网www

WWW是环球信息网的缩写&#xff0c;&#xff08;亦作“Web”、“WWW”、“W3”&#xff0c;英文全称为“World Wide Web”&#xff09;&#xff0c;中文名字为“万维网”&#xff0c;"环球网"等&#xff0c;常简称为Web。 分为Web客户端和Web服务器程序。 WWW可以让W…

飞控计算机的作用,用于波音777飞机的主要飞控计算机

用于波音777飞机的主要飞控计算机飞行控制计算机容错技术本文介绍了在ERA1992年航空电子会议上介绍的波音777的主要飞控计算机。介绍了系(本文共1页)阅读全文>>在对无人机飞控计算机技术发展应用叙述的基础上,设计了一款基于Zynq平台的应用于小型无人机的飞控计算机硬件平…

Springboot,SSM框架的区别

参考文献&#xff1a;文章一 参考文献&#xff1a;文章二 总结&#xff1a; 1.Springboot 将原有的 xml 配置&#xff0c;简化为 java 注解 2.使用 IDE 可以很方便的搭建一个 springboot 项目&#xff0c;选择对应的 maven 依赖&#xff0c;简化Spring应用的初始搭建以及开发过…

Mysql导入excel数据,解决某些特殊字符乱码问题

问题 做项目需要从excel表格导入到mysql的数据库表中&#xff0c;excel表格中的“规格”字段的“”符号导入数据库表中&#xff0c;会出现部分数据的“”这个符号会乱码&#xff0c;成“&#xff1f;”的形式。 解决方法 打开excel表格&#xff0c;另存为csv文件&#xff1b;用…

Redis进阶实践之十六 Redis大批量增加数据

原文:Redis进阶实践之十六 Redis大批量增加数据一、介绍 有时候&#xff0c;Redis实例需要在很短的时间内加载大量先前存在或用户生成的数据&#xff0c;以便尽可能快地创建数百万个键。这就是所谓的批量插入&#xff0c;本文档的目标是提供有关如何以尽可能快的速度向…

项目经理沟通的四个好习惯

一名项目经理沟通的时间占到工作时间的80%&#xff0c;所以如何提高沟通效率就变成了项目经理提高工作效率的重点。 一名优秀的项目经理&#xff0c;无疑是一个好的沟通者。因为&#xff0c;专业的技能可以使你成为某个领域的专家&#xff0c;但出色的沟通技能&#xff0c…

u盘安装成功计算机里找不到文件夹,u盘里的文件不见了,详细教您U盘内容不显示怎么办...

在工作、学习中&#xff0c;我们需要把资料携带外出的时候&#xff0c;首选的存储工具基本上都是U盘。不过有用户在使用U盘时却遇到了U盘的所有的文件夹不见了的情况&#xff0c;但内存的明明文件还在&#xff0c;这到底是为什么呢&#xff1f;难道U盘的文件真的不见了吗&#…

五分钟实现SpringBoot快速入门

文章目录一、创建Maven工程二、添加SpringBoot的起步依赖三、编写SpringBoot引导类四、编写Controller五、测试六、SpringBoot工程热部署一、创建Maven工程 二、添加SpringBoot的起步依赖 文件位置&#xff1a;pom.xml SpringBoot要求&#xff0c;项目要继承SpringBoot的起步…

分布式系统开发工具包 —— 基于Kryo的Java对象序列化

Kryo是用于Java语言的一个快速和高效的对象图序列化框架。Kryo项目的目的是快速、高效、方便地使用API。当需要持久化对象的时候&#xff0c;不论是持久化到文件、数据库还是网络&#xff0c;都可以使用Kryo。 目前Kryo已经到了4.0.1版本以上了。本文的介绍适用于V2.0以上版本。…

代码编辑器Sublime Text 可以跨平台(linux,window,os x)

说到代码编辑器&#xff0c;大部分人首先会想到UltraEdit&#xff0c;EmEditor和notepad。但今天要介绍的是另一款功能非常强大的代码编辑器——Sublime Text。Sublime Text还是一款跨 OS X、Linux 和 Windows 三大平台的文字/代码编辑器。除了Sublime Text出色的功能&#xff…

计算机画图怎样更改文字,如何在图片上改字|超简单的修改图片里文字方法

这篇文章将要给大家介绍的是&#xff0c;不用联网&#xff0c;不用下载专业的图像处理软件&#xff0c;单纯用画图工具&#xff0c;就能修改表情包、图片上文字的方法&#xff0c;只适合简单的图片处理&#xff0c;复杂的还是交给专业的图像处理工具吧。下面系统吧就给大家带来…

软件维护

所谓软件维护就是在软件已经交付使用之后&#xff0c;为了改正错误或满足新的需要而修改软件的过程。可以通过描述软件交付使用后可能进行的4项活动&#xff0c;具体地定义软件维护。 1.改正性维护 因为软件测试不可能暴露出一个大型软件系统中所有潜藏的错误&#xff0c;所以…

【intellij idea】Project Structure 讲解

参考文章&#xff1a;戳这里 谢谢楼主分享