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,一经查实,立即删除!

相关文章

万维网www

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

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

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

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的起步…

代码编辑器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;复杂的还是交给专业的图像处理工具吧。下面系统吧就给大家带来…

javascript高级程序设计学习之数值转换 |Number(),parseInt(),parseFloat()

2019独角兽企业重金招聘Python工程师标准>>> 将非数值转换成数值的函数有三个&#xff1a;Number(),parseInt(),parseFloat(); 小记tip&#xff1a;Number()可以用于任何数据类型&#xff1b;parseInt(),parseFloat()针对的是将字符串&#xff1b; Number()的转换规…

Git学习的最佳教程

身为网页设计师或者网页开发者的你&#xff0c;可能已经听说过Git这个正快速成长的版本控制系统。它由GitHub维护&#xff1b;GitHub是一个开放性的、存储众人代码的网站。如果你想学习如何使用Git&#xff0c;请参考本文。在文章最后&#xff0c;我们罗列了其他Git学习资源。 …

如何使用idea快速创建SpringBoot项目

文章目录一、二、三、四、五、一、 二、 三、 四、 五、

闪光css,CSS实现的一闪而过的图片闪光效果

只需要两个html元素和一个css变换&#xff0c;我就能创造出我自己的闪光效果。让我们来实现它&#xff01;呈现光泽图片下面就是这张addy在他博客上使用的图片&#xff1a;比我需要的要大一些&#xff0c;但你可以把它裁剪一些。注意&#xff1a;左边的那张是纯白色的&#xff…

循序渐进学好编程,不要太急!!!

软件开发人员是一个日新月异的领域—–IT中的大师&#xff0c;今天的编程方式与明天的编程或许截然不同&#xff0c;技术在不断地革新&#xff0c;新语言、新平台的如雨后春笋般出现、更好的解决方案的冒出&#xff0c;因此我们需要跟得上节奏&#xff0c;我们别无选择&#xf…

x230无线网卡驱动服务器版,ThinkPad X230网卡驱动

ThinkPad X230网卡驱动是一款专为ThinkPad X230打造的无线网卡驱动程序&#xff0c;当然&#xff0c;这款驱动也支持其他机型&#xff0c;包括ThinkPad X220,X220i,X220 Tablet,X220i Tablet等等&#xff0c;如果您的笔记本电脑属于下列所列机型中的一款&#xff0c;欢迎您来欧…

学成在线--0.项目概述

文章目录0.前言1.功能架构2.技术架构3.技术栈4.开发步骤0.前言 当前市场的在线教育模式多种多样&#xff0c;包括&#xff1a;B2C、C2C、B2B2C等业务模式&#xff0c;学成在线采用B2B2C业务模式&#xff0c;即向 企业或个人提供在线教育平台提供教学服务&#xff0c;老师和学生…

【Java学习】JDBC可以再深一点理解

JDBC驱动程序 JDBC驱动程序是JDBC API中实现定义的接口。JDBC是java语言中的与数据库连接的接口。也就是说JDBC是Java API&#xff0c;使得Java可以与数据库进行连接&#xff0c;而JDBC驱动程序是JDBC API&#xff0c;驱动JDBC进一步与数据库进行交互。 例如&#xff1a;使用JD…

wordpress 评论ajax,WordPress教程 WordPress实现提交评论ajax翻页效果教程

WordPress提交评论ajax翻页的效果会很大的提高用户体验度&#xff0c;虽然我们一般的个人WordPress博客评论也不会有很多&#xff0c;但是用户体验至上嘛&#xff0c;所以WordPress主题站小编为大家分享WordPress实现提交评论ajax翻页效果教程&#xff0c;希望能给大家能用得上…

Lombok的使用方法

文章目录0.Lombok简介1.在项目中添加Lombok的依赖2.在IDEA开发工具中添加Lombok插件0.Lombok简介 Lombok是一个实用的java工具&#xff0c;使用它可以消除java代码的臃肿&#xff0c;Lombok提供一系列的注解&#xff0c;使用这些注解可 以不用定义getter/setter、equals、构造…

世上最伟大的十个公式,质能方程排名第五

英国科学期刊《物理世界》曾让读者投票评选了“最伟大的公式”&#xff0c;最终榜上有名的十个公式既有无人不知的112&#xff0c;又有著名的Emc2&#xff1b;既有简单的-圆周公式&#xff0c;又有复杂的欧拉公式…… 从什么时候起我们开始厌恶数学&#xff1f;这些东西原本…

2000服务器文件共享,Win2000 Server实现对共享文件的监控

病毒的出现&#xff0c;使我们在共享文件时变得异常小心。那么&#xff0c;有没有办法监控共享文件的使用情况并加以管理呢&#xff1f;有&#xff0c;用Windows 2000 Server的文件共享监控功能就可以实现。Windows 2000 Server的共享管理功能在“计算机管理”中&#xff0c;它…

学成在线--1.CMS接口开发

文章目录0.定义CMS1.CMS页面管理2.需求分析3.模型类介绍4.定义请求及响应类型5.定义接口6.创建CMS工程结构7.Dao1&#xff09;创建Dao&#xff0c;继承MongoRepository2&#xff09;编写测试类分页查询测试添加删除修改8.Service9.Controller10.接口开发规范0.定义CMS 1&#…