博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring-Cloud-Finchley | 负载均衡 RestTemplate+Ribbon
阅读量:4104 次
发布时间:2019-05-25

本文共 5417 字,大约阅读时间需要 18 分钟。

简介

负载均衡提供了一种廉价的方式扩展网络设备和服务器带宽,增加吞吐量,加强网络数据的处理能力,也就是把多个请求分摊到不同的服务器上,降低单台服务器的压力。

Ribbon 和 Nginx 都可以用来做负载均衡,他们的区别与场景如下:

Nginx 是服务器负载均衡,Ribbon 是客户端负载均衡,Nginx 是客户端把所有请求交给 Nginx,由 Nginx 进行转发,Ribbon 是从注册中心获取注册信息,缓存到本地,然后在本地实现负载均衡策略。

Nginx 通常在服务器端实现负载均能,比如 Tomcat,Ribbon 则使用在微服务中的 RPC 调用实现负载均衡。

实例

1、创建 maven 工程

创建 maven 工程,添加核心的父 maven 依赖,所有子 pom 文件继承这个父 pom 文件。

UTF-8
1.8
1.8
Finchley.RELEASE
org.springframework.boot
spring-boot-starter-parent
2.0.5.RELEASE
junit
junit
4.11
test
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
2、搭建注册中心 eureka-server

添加 maven 依赖

com.hly
02-spring-cloud-rest-ribbon
1.0-SNAPSHOT
UTF-8
UTF-8
1.8
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-web

application.yml 配置

server:  port: 8761eureka:  instance:    hostname: localhost  client:    registerWithEureka: false    fetchRegistry: false    serviceUrl:      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/spring:  application:    name: eureka-server

SpringBoot 启动类

@SpringBootApplication@EnableEurekaServerpublic class EurekaServerApplication {	public static void main(String[] args) {		SpringApplication.run(EurekaServerApplication.class, args);	}}
3、搭建服务提供者 eureka-client

添加 maven 依赖

com.hly
eureka-client
0.0.1-SNAPSHOT
jar
eureka-client
Demo project for Spring Boot
com.hly
02-spring-cloud-rest-ribbon
1.0-SNAPSHOT
UTF-8
UTF-8
1.8
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web

application.yml 配置

server:  port: 8763spring:  application:    name: eureka-clienteureka:  client:    serviceUrl:      defaultZone: http://localhost:8761/eureka/

SpringBoot 启动类

@SpringBootApplication@RestController@EnableEurekaClientpublic class EurekaClientApplication {	public static void main(String[] args) {		SpringApplication.run(EurekaClientApplication.class, args);	}	@Value("${server.port}")	String port;	@RequestMapping("/hello")	public String home(@RequestParam(value = "name", defaultValue = "hly") String name) {		return "hi " + name + " ,i am from port:" + port;	}}
4、搭建服务消费者 eureka-client-ribbon

添加 maven 依赖

com.hly
02-spring-cloud-rest-ribbon
1.0-SNAPSHOT
UTF-8
UTF-8
1.8
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-ribbon

application.yml 配置

eureka:  client:    serviceUrl:      defaultZone: http://localhost:8761/eureka/server:  port: 8764spring:  application:    name: eureka--ribbon

SpringBoot 启动类

@SpringBootApplication@EnableEurekaClient@EnableDiscoveryClientpublic class EurekaClientRibbonApplication {	public static void main(String[] args) {		SpringApplication.run(EurekaClientRibbonApplication.class, args);	}	@Bean	//表明这个restRemplate开启负载均衡的功能	@LoadBalanced	RestTemplate restTemplate() {		return new RestTemplate();	}}

服务层类

@Servicepublic class HelloService {    @Autowired    RestTemplate restTemplate;    public String hiService(String name) {        //调用该方法,做了负载均衡,访问不同端口的实例        return restTemplate.getForObject("http://EUREKA-CLIENT/hello?name="+name,String.class);    }    /**     * 启动两个服务,关闭一个,只能访问另一个,两个都关闭,将输出以下错误语句     * @param name     * @return     */    public String helloError(String name){        return "hello,"+name+",sorry,error";    }}

Controller 层类,消费服务提供者

@RestControllerpublic class HelloController {    @Autowired    HelloService helloService;    /**     * 启动多个集群,浏览器多次访问 http://localhost:8764/hi?name=hly,交替出现结果     * @param name     * @return     */    @GetMapping(value = "/hi")    public String hi(@RequestParam String name) {        return helloService.hiService(name);    }}

演示

1、依次启动 注册中心 eureka-server ,启动两个 eureka-client(启动一个后,修改application.yml 配置文件的端口,再次启动一次),启动服务消费者 eureka-client-ribbon

2、浏览器访问 http://localhost:8764/hi?name=hly ,然后刷新浏览器,会交替调用两个客户端,实现了两个客户端的负载均衡。
在这里插入图片描述

思维导图

代码下载

02-spring-cloud-rest-ribbon:

关于

公众号:【星尘Pro】

github:

推荐阅读

转载地址:http://sufsi.baihongyu.com/

你可能感兴趣的文章
C++ 写时拷贝 2
查看>>
Linux网络编程---I/O复用模型之poll
查看>>
Java NIO详解
查看>>
单列模式-编写类ConfigManager读取属性文件
查看>>
java中float和double的区别
查看>>
Statement与PreparedStatement区别
查看>>
Tomcat配置数据源步骤以及使用JNDI
查看>>
before start of result set 是什么错误
查看>>
(正则表达式)表单验证
查看>>
在JS中 onclick="save();return false;"return false是
查看>>
JSTL 常用标签总结
查看>>
内容里面带标签,在HTML显示问题,JSTL
查看>>
VS编译器运行后闪退,处理方法
查看>>
用div+css做下拉菜单,当鼠标移向2级菜单时,为什么1级菜单的a:hover背景色就不管用了?
查看>>
idea 有时提示找不到类或者符号
查看>>
JS遍历的多种方式
查看>>
ng-class的几种用法
查看>>
node入门demo-Ajax让前端angularjs/jquery与后台node.js交互,技术支持:mysql+html+angularjs/jquery
查看>>
神经网络--单层感知器
查看>>
注册表修改DOS的编码页为utf-8
查看>>