4、Spring Cloud-负载均衡 Ribbon
4.1、RestTemplate 简介
4.2、Ribbon 简介

4.3、使用RestTemplate和Ribbon来消费

ProviderService.java
package com.cr.eurekaclient.service;
import org.springframework.stereotype.Service; @Service
public class ProviderService { public String port(){
return "";
}
}
PortController.java
package com.cr.eurekaclient.controller; import com.cr.eurekaclient.service.ProviderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class PortController { @Autowired
ProviderService providerService; @GetMapping("/port")
public String getPort(){
return providerService.port();
}
}
配置文件:
server.port=
spring.application.name=CLINET
#应用起名字spring.application.name=provider
#注册服务时使用服务的ip地址
eureka.instance.prefer-ip-address=true
#服务中心地址
eureka.client.service-url.defaultZone=http://localhost:8762/eureka/
访问:

去注册中心可以看到此时的服务已经在注册中心注册:

这里的Application将会是消费者中引用的地址!!!
服务的消费者:


RibbonConfig.java
@Configuration
public class RibbonConfig { @Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
RibbonController.java
@RestController
public class RibbonController {
@Autowired
RibbonService ribbonService; @GetMapping("/port")
public String port(){
return ribbonService.port();
}
}
@Service
public class RibbonService { @Autowired
RestTemplate restTemplate; public String port(){
return restTemplate.getForObject("http://CLINET/port",String.class);
}
}
http://CLINET/port中的CLIENT为注册中心中的Application中的值
@EnableEurekaClient
@SpringBootApplication
public class EurekaRibbonClientApplication { public static void main(String[] args) {
SpringApplication.run(EurekaRibbonClientApplication.class, args);
}
}
配置文件:
spring.application.name=eureka-ribbon-client
server.port=
eureka.client.service-url.defaultZone=http://localhost:8762/eureka/


@LoadBalanced开启负载均衡功能
测试实现:

同时也将8090换成8089,使用maven进行打包

在cmd中运行两个项目:

此时8089、8090端口都可以进行访问


http://localhost:8088/port页面进行刷新请求


4.4、loadBalancerClient 简介
在工程中进行测试:

RibbonController.java
package com.cr.eurekaribbonclient.controller; import com.cr.eurekaribbonclient.service.RibbonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class RibbonController {
@Autowired
RibbonService ribbonService; @GetMapping("/port")
public String port(){
return ribbonService.port();
} @Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/testRibbon")
public String testRibbon(){
ServiceInstance instance = loadBalancerClient.choose("CLINET");
return instance.getHost()+ ":" + instance.getPort();
}
}


spring.application.name=eureka-ribbon-client
server.port=
eureka.client.service-url.defaultZone=http://localhost:8762/eureka/
stores.ribbon.listOfServers:example.com,google.com
ribbon.eureka.enabled=false
package com.cr.eurekaribbonclient.controller; import com.cr.eurekaribbonclient.service.RibbonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class RibbonController {
@Autowired
RibbonService ribbonService; @GetMapping("/port")
public String port(){
return ribbonService.port();
} @Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/testRibbon")
public String testRibbon(){
ServiceInstance instance = loadBalancerClient.choose("CLINET");
return instance.getHost()+ ":" + instance.getPort();
} //进一步说明
@GetMapping("/hi")
public String hi(){
ServiceInstance instance = loadBalancerClient.choose("stores");
return instance.getHost()+ ":" + instance.getPort();
}
}

4、Spring Cloud-负载均衡 Ribbon的更多相关文章
- spring Cloud负载均衡Ribbon
Ribbon饥饿加载 默认情况下Ribbon是懒加载的.当服务起动好之后,第一次请求是非常慢的,第二次之后就快很多. 解决方式:开启饥饿加载 ribbon: eager-load: enabled: ...
- Spring Cloud 负载均衡初体验
目录 服务搭建 1.注册中心--Eureka Server 2.服务提供方--Service Provider 3.服务消费方--Service Consumer 服务消费 Feign 与断路器 Hy ...
- Spring Cloud负载均衡:使用zuul作服务器端负载均衡
1.目的: 本文简述Spring Cloud负载均衡之服务器负载均衡模式,使用组件为zuul. zuul作为Spring Cloud中的网关组件,负责路由转发.身份验证.请求过滤等等功能,那么我们可以 ...
- Spring Cloud负载均衡:使用Feign作客户端负载均衡
有了一篇服务端负载均衡后,再来一篇客户端负载均衡,客户端负载均衡很简单,无需在zuul中做多余配置(本示例不引入zuul),只需要在客户端进行Feign引入和配置即可. 准备工作很简单,实现客户端负载 ...
- Spring Cloud 客服端负载均衡 Ribbon
一.简介 Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署, ...
- Spring Cloud(Dalston.SR5)--Ribbon 中间层负载均衡
Spring Cloud 集成了 Ribbon 并结合 Eureka 可以实现客户端的负载均衡,使用 @LoadBalanced 修饰的 RestTemplate 类拥有了负载均衡功能,在 Sprin ...
- Spring Cloud:使用Ribbon实现负载均衡详解(下)
在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何 ...
- Spring Cloud第四篇 | 客户端负载均衡Ribbon
本文是Spring Cloud专栏的第四篇文章,了解前三篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...
- 2.【Spring Cloud Alibaba】实现负载均衡-Ribbon
负载均衡的两种方式 如何实现负载均衡 目前已经实现让A总能找到B,如何实现负载均衡 负载均衡的两种方式 服务器端负载均衡 客户端负载均衡 使用Ribbo实现负载均衡 Ribbon是什么 ==Netfl ...
- SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)使用详解
前言 本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡. SpringCloud Feign Fei ...
随机推荐
- 高并发系列之——缓存中间件Redis
1 概念和使用场景 下载路径 2 基本存储类型 String List Set SortedSet Hash 3 事务 单线程执行,即只能保证一个client发起的事务中的命令可以连续的执行,而中间不 ...
- HTTP2 概述
HTTP/2,也就是超文本传输协议第2版,不论是1还是2,HTTP的基本语义是不变的,比如方法语义(GET/PUST/PUT/DELETE),状态码(200/404/500等),Range Reque ...
- 【hdu 2112】 HDU Today ( 最短路 Dijkstra)(map)
http://acm.hdu.edu.cn/showproblem.php?pid=2112 这道题给了一个将字符串与int对应的思路,就是使用map 这道题答案对了,但是没有AC,我也不知道为什么. ...
- MyBatis学习(三)---MyBatis和Spring整合
想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302. ...
- bat批处理中如何获取前一天日期
网上找了好久在批处理中生成前一日期的代码段 但网上找到的代码对 每个月的1号和每年的1号计算前一日期时,总会报错,然后要加很多的逻辑判断 想了想,可以用.net写个EXE程序,用.net实现获取前一日 ...
- sublime设置语法自动整齐快捷键技巧
preference>>key bindings-user>>编辑设置文档, 输入 { "keys": ["ctrl+q"], &quo ...
- Linux命令行bash批量重命名文件
本文介绍下,在linux下使用shell批量重命名文件的例子,有需要的朋友参考下吧. 在linux中,重命名文件名,需要用到mv命令.如果需要批量重命名名一批文件,就需要写bash脚本或命令行了. 例 ...
- react常用命令
npm install -g create-react-appcreate-react-app my-appcd my-app/ 启动项目:npm start 安装依赖:npm install 编译: ...
- C# 串口
/// <summary> /// 串口初始化 /// </summary> private void OpenSerialPort ...
- IEC62304-2006解读
IEC62304强调医疗软件在明确和满足其预期用途的前提下,不能引发不可接受的风险 62304提供一个医疗软件开发的框架,并指出框架下每个过程的要求,62304将过程分解为若干活动,活动分解为若干任务 ...