4.1、RestTemplate 简介

RestTemplate是Spring Resources中一个访问RESTful API 接口的网络请求框架。
 
RestTemplate 的设计 则和其他 Spring Template (例如 JdbcTemplate JmsTemplate )类似,都
是为执行复杂任务提供了一个具有默认行为的简单方法。
 
RestTemplate 是用来消费 REST 服务的,所以 RestTemplate 主要方法都与REST的HTTp
协议的一些方法紧密相连,例如 HEAD 、GET 、POST 、PUT、DELETE和OPTIONS 等方法
这些方法在 RestTemplate 类对应的方法为 headForHeaders()、getForObject()、 
postForObject()、put()和 delete () 等。
 
RestTemplate 支持常见的 Http 协议的请求方法,例如 Post、 Put、 Delete ,所以用
RestTemplate 很容易构建 RESTful API 。

4.2、Ribbon 简介

负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式。
 
1.独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如 Ngnix 。
2.将负载均衡逻辑以代码的形式封装到服务消费者的客户端上,服务消费者客户端维护了一份服务提
  供者的信息列 ,有了信息列表,通过负载均衡策略将请求分摊给多个服务提供者,从而达到负
  载均衡的目的。
 
Ribbon是Netflix 公司开源的一个负载均衡的组件,它属于上述的第2种方式
是将负载均衡逻辑封装在客户端中,并且运行在客户端的进程里
 
Ribbon是一个经过了云端测试的 IPC库,可以很好地控制 HTTP和TCP 客户端的负载均衡行为。
 
Spring Cloud 构建的微服务系统中, Ribbon 作为服务消费者的负载均衡器
两种使用方式:  
1、 和RestTemplate 相结合
2、是和 Feign 相结合。(Feign 已经默认集成了 Ribbon) 
 
Ribbon 有很多子模块,但很多模块没有用于生产环境,目前 Netflix 公司用于生产环境的 Ribbon
子模块如下:

4.3、使用RestTemplate和Ribbon来消费

之前的案例中已经有了注册中心此时不在进行注册中心的代码实现
(之前关于Eureka的高可用中有两个端口的Eureka)
 
服务提供者的开发如下:
eureka-client地址:https://www.cnblogs.com/Mrchengs/p/10645860.html
是之前的工程进行改变的

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();
}
}
RibbonService.java
@Service
public class RibbonService { @Autowired
RestTemplate restTemplate; public String port(){
return restTemplate.getForObject("http://CLINET/port",String.class);
}
}

http://CLINET/port中的CLIENT为注册中心中的Application中的值

EurekaRibbonClientApplication.java
@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/
访问:localhost:8080之后、
看注册中心:

 

@LoadBalanced开启负载均衡功能

测试实现:

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

在cmd中运行两个项目:

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

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

此似乎可以看到两个端口的服务都可以访问到!!
 
负载均衡器会轮流地请求CLIENT的两个实例中的“/port”请求

4.4、loadBalancerClient 简介

负载均衡器的核 类为 LoadBalancerClient
LoadBalancerCiient 可以获取负载均衡的服务提供者的实例信息

在工程中进行测试:

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();
}
}
继续运行项目:

LoadBalancerClient的choose("CLINET")方法可以轮流得到 eureka-client 的两个服务实例的信息
 
负载均衡LoadBalancerClient是从Eureka Client 获取服务注册列表信息的,并且将注册信息缓存一份
 
LoadBalancerCJient 调用 choose()方法时,根据负载均衡策略选择一个服务实例的信息,
从而进行了负载均衡
 
LoadBalancerClient 也可以不从 Eureka Client 获取注册列表信息,
这时需要自己维护 份服务注册列 信息
 
有两个不同 Uri 地址 (例如 example.com,google.com )的服务实例 ,通
stores.ribbon.listOfServers 来配 这些服务实例的 Uri
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的更多相关文章

  1. spring Cloud负载均衡Ribbon

    Ribbon饥饿加载 默认情况下Ribbon是懒加载的.当服务起动好之后,第一次请求是非常慢的,第二次之后就快很多. 解决方式:开启饥饿加载 ribbon: eager-load: enabled: ...

  2. Spring Cloud 负载均衡初体验

    目录 服务搭建 1.注册中心--Eureka Server 2.服务提供方--Service Provider 3.服务消费方--Service Consumer 服务消费 Feign 与断路器 Hy ...

  3. Spring Cloud负载均衡:使用zuul作服务器端负载均衡

    1.目的: 本文简述Spring Cloud负载均衡之服务器负载均衡模式,使用组件为zuul. zuul作为Spring Cloud中的网关组件,负责路由转发.身份验证.请求过滤等等功能,那么我们可以 ...

  4. Spring Cloud负载均衡:使用Feign作客户端负载均衡

    有了一篇服务端负载均衡后,再来一篇客户端负载均衡,客户端负载均衡很简单,无需在zuul中做多余配置(本示例不引入zuul),只需要在客户端进行Feign引入和配置即可. 准备工作很简单,实现客户端负载 ...

  5. Spring Cloud 客服端负载均衡 Ribbon

    一.简介   Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署, ...

  6. Spring Cloud(Dalston.SR5)--Ribbon 中间层负载均衡

    Spring Cloud 集成了 Ribbon 并结合 Eureka 可以实现客户端的负载均衡,使用 @LoadBalanced 修饰的 RestTemplate 类拥有了负载均衡功能,在 Sprin ...

  7. Spring Cloud:使用Ribbon实现负载均衡详解(下)

    在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何 ...

  8. Spring Cloud第四篇 | 客户端负载均衡Ribbon

    ​ 本文是Spring Cloud专栏的第四篇文章,了解前三篇文章内容有助于更好的理解本文: ​Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...

  9. 2.【Spring Cloud Alibaba】实现负载均衡-Ribbon

    负载均衡的两种方式 如何实现负载均衡 目前已经实现让A总能找到B,如何实现负载均衡 负载均衡的两种方式 服务器端负载均衡 客户端负载均衡 使用Ribbo实现负载均衡 Ribbon是什么 ==Netfl ...

  10. SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)使用详解

    前言 本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡. SpringCloud Feign Fei ...

随机推荐

  1. LeetCode 第二天后续(两数相加 python3)

    # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # sel ...

  2. redis集群的远程管理与监控

    一.redis集群的重要性 目前大部分的互联网平台,都会用到Redis内存数据库,以提高响应速度,提升用户使用体验. 为了实现Redis的高可用,通常都会布署Redis集群,使用Redis-Senti ...

  3. oauth2.0授权协议

    参考文章 一.OAuth是什么? OAuth的英文全称是Open Authorization,它是一种开放授权协议.OAuth目前共有2个版本,2007年12月的1.0版(之后有一个修正版1.0a)和 ...

  4. async await的使用

    var sleep = function (time) { return new Promise(function (resolve, reject) { setTimeout(function () ...

  5. JS 处理浮点型问题

    function disposeNumber(value){ if(value == null || value == ""){ return 0; }else if(value. ...

  6. 为什么推荐用ui-router替代ngRoute

    初学angularjs,第一个实例是官网的phoneCat,里面路由用的是ngRoute,后来看到别的用ui-router,觉得好奇,ui-route是什么呢?百度一些,得到如下解释: ui-rout ...

  7. Django——REST framework

    1. 什么是REST REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类审 ...

  8. CentOS6.5(3)----设置自己安装的程序开机自动启动

    CentOS6.5系统下设置自己安装的程序开机自动启动 方法1. 把启动程序的命令添加到 /etc/rc.d/rc.local 文件中,比如设置开机启动 mysqld: #!/bin/sh # # T ...

  9. 一步一步pwn路由器之路由器环境修复&&rop技术分析

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 拿到路由器的固件后,第一时间肯定是去运行目标程序,一般是web服务 ...

  10. Spring3实战第一章 Aop 切面 XML配置

    刚看spring3实战书籍第一章  切面以前没有关注过 现在看到了  随手试验一下 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Objec ...