服务消费者(Ribbon)
上一篇文章,简单概述了服务注册与发现,在微服务架构中,业务都会被拆分成一个独立的服务,服务之间的通讯是基于http restful的,Ribbon可以很好地控制HTTP和TCP客户端的行为,Spring Cloud有两种调用方式,一种是Ribbon+RestTemplate,另一种是Feign(集成Ribbon+Hystrix),本章主要讲解Ribbon
- Ribbon简介
Ribbon 是一个客户端负载均衡器,它可以让你对HTTP和TCP客户机的行为有很大的控制权,如果你正在使用 @FeignClient
那么这一段也适用,因为Feign集成了Ribbon的功能,Ribbon 中的一个中心概念就是指定客户端,每个负载均衡器都是组成组件的一部分,这些组件一起工作以根据需要请求远程服务器。
官方文档:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#spring-cloud-ribbon
- 准备工作
1.创建项目,在上一章已经详细描述了,没看过的可以详细看一下 一起来学SpringCloud之-注册中心(Eureka/Consul)
2.启动Consul,后续所有文章都将以Consul作为服务注册中心
创建Ribbon项目
- pom.xml
1 |
<dependencies> |
- BattcnCloudRibbonApplication.java
1 |
@SpringBootApplication |
- bootstrap.yml
1 |
server: |
- 测试
启动:battcn-cloud-hello(上一章的项目,稍微做了修改,app.java中添加了日志输出)
启动:battcn-cloud-ribbon(本章项目)
访问:http://localhost:8500/ 显示如下代表服务注册成功
查看注册中心
访问:http://localhost:8763/ribbon?email=123456@qq.com
1 |
server <<==>> My Name's :battcn-cloud-hello Email:123456@qq.com |
如果需要测试负载功能,将 battcn-cloud-hello
打包,然后通过 cmd
方式启动,因为我使用的是IDEA总是提示我关闭重启,因此我是打的JAR,如果是Eclipse的朋友可以直接修改yml文件的端口启动多次
1 |
battcn-cloud-hello-8762:java -jar battcn-cloud-hello-1.0.0-SNAPSHOT.jar --server.port=8762 battcn-cloud-hello-8763:java -jar battcn-cloud-hello-1.0.0-SNAPSHOT.jar --server.port=8763 |
结果
- 请求图
架构图
画图工具:https://www.processon.com/
- 新特性
从版本1.2.0开始,Spring Cloud Netflix现在支持使用属性与Ribbon文档兼容来自定义功能区客户端。
允许在不同环境中更改启动时的行为。
支持的属性如下所示,应以.ribbon.:
NFLoadBalancerClassName:应实现 ILoadBalancer
NFLoadBalancerRuleClassName:应实现 IRule
NFLoadBalancerPingClassName:应实现 IPing
NIWSServerListClassName:应实现 ServerList
NIWSServerListFilterClassName 应实现 ServerListFilter
注意:在这些属性中定义的类优先于使用@RibbonClient(configuration=MyRibbonConfig.class)
Spring 定义的bean 以及由Spring Cloud Netflix提供的默认值。要设置IRule
服务名称,users您可以设置以下内容:
application.yml
1 |
users: |
- 定义自己的RibbonClient
警告:在FooConfiguration 中使用 @Configuration
,需要注意是不是在@ComponentScan主应用程序上下文,否则会被所有的共享@RibbonClients。如果您使用@ComponentScan(或@SpringBootApplication)您需要采取措施避免它被包含(例如将其放在一个单独的,不重叠的包中,或者指定要在其中显式扫描的包@ComponentScan)。
简单点说就是:不要让 @ComponentScan
同时扫描到主程序和自定义的带有@Configuration
的文件
1 |
com.battcn.BattcnCloudRibbonApplication.java com.config.FooConfiguration.java |
- FooConfiguration
1 |
@Configuration |
- BattcnCloudRibbonApplication
1 |
@SpringBootApplication |
- 测试
随机访问N次:http://localhost:8764/ribbon?email=123456@qq.com 结果如下(人品只要不是好到爆炸就不会五五开)
自定义Rule
服务消费者(Ribbon)的更多相关文章
- 创建服务消费者(Ribbon)
概述 在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于 http restful 的.Spring cloud 有两种服务调用方式,一种是 ribbon + restTempla ...
- SpringCloud-创建服务消费者-Ribbon方式(附代码下载)
场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 7、服务发现&服务消费者Ribbon
公众号: java乐园 在<服务注册&服务提供者>这一篇可能学习了这么开发一个服务提供者,在生成上服务提供者通常是部署在内网上,即是服务提供者所在的服务器是与互联网完全隔离的.这篇 ...
- Spring Cloud (3) 服务消费者-Ribbon
在上一篇中使用LoadBalancerClient接口实现了获取某个服务的具体实例,并根据实例信息发起服务接口消费请求.但是这样的做法需要我们手工的区编写服务选取.连接拼接等繁琐的工作,对于开发人员来 ...
- 「 从0到1学习微服务SpringCloud 」04服务消费者Ribbon+RestTemplate
系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...
- springcloud-Netflix创建服务消费者
目录 springcloud-Netflix创建服务消费者 Ribbon 创建服务消费者-Ribbon方式 ribbon的架构 Feign 创建包和基本项目结构 创建Feign访问服务的接口和访问co ...
- SpringCloud-使用熔断器防止服务雪崩-Ribbon和Feign方式(附代码下载)
场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- SpringCloud-创建服务消费者-Feign方式(附代码下载)
场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 「 从0到1学习微服务SpringCloud 」05服务消费者Fegin
系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...
- springcloud干货之服务消费者(ribbon)
本章介绍springcloud中的服务消费者 springcloud服务调用方式有两种实现方式: 1,restTemplate+ribbon, 2,feign 本来想一篇讲完,发现篇幅有点长,所以本章 ...
随机推荐
- java实现第三届蓝桥杯提取子串
提取子串 [代码填空](满分16分) 串"abcba"以字母"c"为中心左右对称:串"abba" 是另一种模式的左右对称.这两种情况我们都称 ...
- 原生js ajax 封装
首先我们先了解ajax的get和post请求分别是怎样请求数据的 get请求 let ajx = new XMLHttpRequest() //创建ajax实例 /*打开需要请求的地址,可以有三个参数 ...
- lambda操作DataTable进阶版
using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Text; ...
- 一篇文章快速搞懂 Atomic(原子整数/CAS/ABA/原子引用/原子数组/LongAdder)
前言 相信大部分开发人员,或多或少都看过或写过并发编程的代码.并发关键字除了Synchronized,还有另一大分支Atomic.如果大家没听过没用过先看基础篇,如果听过用过,请滑至底部看进阶篇,深入 ...
- OpenJudge - 2977:生理周期
原题链接 总时间限制: 1000ms 内存限制: 65536kB 描述 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天 ...
- Quartz SpringBoot 简单整合一下
一次简单的代码整合记录. 数据库准备 如果是MySQL可能出现一些小问题.比如联合主键长度超限制,已经记录解决办法了. CREATE TABLE QRTZ_JOB_DETAILS ( SCHED_NA ...
- ios判断当前设备是否是ipad
+ (BOOL)getIsIpad { NSString *deviceType = [UIDevice currentDevice].model; if([deviceType isEqualToS ...
- foreach 集合又抛经典异常了,这次一定要刨根问底
一:背景 1. 讲故事 最近同事在写一段业务逻辑的时候,程序跑起来总是报:集合已修改:可能无法执行枚举操作,硬是没有找到什么情况下会导致这个异常产生,就让我来找一下bug,其实这个异常在座的每个程序员 ...
- 自己动手实现深度学习框架-8 RNN文本分类和文本生成模型
代码仓库: https://github.com/brandonlyg/cute-dl 目标 上阶段cute-dl已经可以构建基础的RNN模型.但对文本相模型的支持不够友好, 这个阶段 ...
- sockaddr_in与sockaddr区别
先粘代码 struct sockaddr { __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */ char s ...