Dubbo学习系列之十七(微服务Soul网关)
论起微服务,哪能不谈网关,老将有Zuul,后继有Gateway,但这些都和SpringCloud关系密切,其他网关如Kong,因Lua原因,玩起来略不顺手。这不,就来了个Soul,我顺便拿来整进了我在写的项目中,感觉还行,也发现了些问题,表现有待观察,另一方面发现Soul资料略少,我就出点实例供看官参考参考。
准备:
Idea2019.03/Gradle6.0.1/JDK11.0.4/Lombok0.28/SpringBoot2.2.2RELEASE/mybatisPlus3.3.0/Sou2.1.2/Dubbo2.7.5/Mysql8.0.11
难度: 新手--战士--老兵--大师
目标:
1.实现http模式下使用soul网关转发
2.使用soul网关多服务实例负载均衡
步骤:
为了遇见各种问题,同时保持时效性,我尽量使用最新的软件版本。代码地址:https://github.com/xiexiaobiao/vehicle-shop-admin
1 Soul 网关特点
- 插件式管理,动态热加载
- 独立式部署,带web管理界面
- 可对接HTTP,Restful,websocket,dubbo和springcloud
2 http模式使用
2.1 项目中加入依赖:dubbo接入使用soul-client-apache-dubbo包,http接入使用:soul-client-springmvc包。
2.2 定义配置:
重点就是“contextPath”,即这个插件匹配到uri路径为 “ /stock/** ”
2.3 在Controller的方法上使用@SoulClient注解,比如:
@SoulClient(path = "/vehicle/stock/brand/list", desc = "获取所有品牌列表")
此处因为我整个项目加了context-path: /vehicle
,故有/vehicle
前缀:
使用http接入需要使用zk,否则控制台会报错,但经测试不使用zk功能上也可以,官方也说明已脱离对zk强依赖,应该是历史遗留问题。
2.4 先启动zookeeper(非必需),再启动soul-admin.jar,再启动soul-bootstrap.jar(这两个可以官网下载,依照说明使用),最后启动项目。
结构关系如下:
2.5 使用http接入为例,启动完毕后访问 http://localhost:9095/index.html
默认的用户名:admin 密码:123456,发现已自动加入了定义的“选择器”和“选择器规则”:
选择器详细:
“http配置”可以有多个目标地址,即多个微服务实例,再配合选择器规则即可做负载均衡。“权重”越大,random模式下分配到的概率越大。本机的话ip也可以直接用127.0.0.1,“条件”推荐使用uri模式匹配,这也是网关核心之一的路由功能了!
选择器规则详细:
这里可以配置负载均衡策略,三种:hash、random和robin。
2.6 并先关闭其他插件,只保留divide:
2.7 测试:
直接http访问项目API:
使用soul网关访问,注意对比url地址。注意这里是soulClient的端口,不是soulAdmin的!!
同时可以看到soul-bootstrap控制台进行http路由转发的信息:
总结
1.使用发现对RESTFUL支持只有GET/POST,其他如PUT/DELETE,总是导致携带的参数丢失,无法转发到目标地址,可能设计上就只支持GET/POST。
2.Soul热插件和web端操作,还是体验较好的,我使用的项目代码较多,看官完全可以自己写一个简单的SpringbootMVC项目来测试。
3.请期待我的后续:集群部署和Dubbo接入。
全文完!
推荐阅读:
- 1 Docker部署RocketMQ
- 2 流式计算(五)-Flink 计算模型
- 3 流式计算(四)-Flink Stream API 篇二
- 4 流式计算(三)-Flink Stream 篇一
- 5 流式计算(二)-Kafka Stream
Dubbo学习系列之十七(微服务Soul网关)的更多相关文章
- Dubbo学习系列之六(微服务架构实战)
看了最近文章的反馈,似乎波澜不惊的样子,应该是看官觉得都是小菜,那我就直上硬菜,人狠话不多,开始!准备:Idea201902/JDK11/ZK3.5.5/Gradle5.4.1/RabbitMQ3.7 ...
- SpringCloud学习系列-构建部门微服务消费者Module
1.新建microservicecloud-consumer-dept-80 2.Pom <project xmlns="http://maven.apache.org/POM/4.0 ...
- Dubbo学习系列之八(分布式事务之MQ方案)
自从小王玩起了微服务,发现微服务果然很强大,好处真是太多,心中暗喜,然而,却也遇到了分布式中最棘手的问题:分布式事务.小王遍访各路神仙,也无个完美开源解决方案,当然,也有些实际可行的手法,虽不算完美, ...
- Dubbo学习系列之九(Shiro+JWT权限管理)
村长让小王给村里各系统来一套SSO方案做整合,隔壁的陈家村流行使用Session+认证中心方法,但小王想尝试点新鲜的,于是想到了JWT方案,那JWT是啥呢?JavaWebToken简称JWT,就是一个 ...
- Dubbo学习系列之七(分布式订单ID方案)
既然选择,就注定风雨兼程! 开始吧! 准备:Idea201902/JDK11/ZK3.5.5/Gradle5.4.1/RabbitMQ3.7.13/Mysql8.0.11/Lombok0.26/Erl ...
- Dubbo学习系列之十(Sentinel之限流与降级)
各位看官,先提个问题,如果让你设计一套秒杀系统,核心要点是啥???我认为有三点:缓存.限流和分离.想当年12306大面积崩溃,还有如今的微博整体宕机情况,感觉就是限流降级没做好,"用有限的资 ...
- Dubbo学习系列之十五(Seata分布式事务方案TCC模式)
上篇的续集. 工具: Idea201902/JDK11/Gradle5.6.2/Mysql8.0.11/Lombok0.27/Postman7.5.0/SpringBoot2.1.9/Nacos1.1 ...
- Dubbo学习系列之十一(Dashboard+Nacos规则推送)
中国武术,门派林立,都是号称多少代的XXX传人,结果在面对现代武术时,经常被KO秒杀,为啥,光靠宣传和口号撑门面,终究是靠不住,必须得有真货 ,得经得住考验,所以不能只说Sentinel有多好,也得给 ...
- Dubbo学习系列之十二(Quartz任务调度)
Quartz词义为"石英"水晶,然后聪明的人类利用它发明了石英手表,因石英晶体在受到电流影响时,它会产生规律的振动,于是,这种时间上的规律,也被应用到了软件界,来命名了一款任务调度 ...
随机推荐
- .NET BS端和CS端相互压缩发送接收byte对象数据方法
本文是总结实际项目经验,代码不少是学习别人整合的,效果稳定可靠,有很大参考价值:但是也有不全面的地方,朋友们拿到可以按照自己需要修改. 场景是项目需要在客户端控制台软件和.NET MVC站点间互相传递 ...
- 鼠标右键新建Markdown文档
首先放一张github某项目中.md文件中的内容图片 Windows系统下,使用 Typora 软件来进入Markdown文档的编写非常容易,而且入门门槛非常的低 存在的问题: 习惯了使用Markdo ...
- 2016女生专场 ABCDEF题解 其他待补...
GHIJ待补... A.HUD5702:Solving Order Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- Lua表(table)的个人总结
1.表的简介和构造 table是个很强大且神奇的东西,又可以作为数组和字典,又可以当作对象,设置module.它是由数组和哈希表结合的实现的.他的key可以是除nil以外任意类型的值,key为整数时, ...
- echarts圆饼图设置默认选中项并在中间显示文字
效果: 代码: var myChart = echarts.init(document.getElementById('quanshi-echarts-two')); option = { grid: ...
- Mixing Milk 混合牛奶 USACO 贪心
1009: 1.3.1 Mixing Milk 混合牛奶 时间限制: 1 Sec 内存限制: 128 MB提交: 9 解决: 9[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 1. ...
- 【转】程序员"青春饭"问题之我见
1. 问题描述问题1: 什么是程序员?在本文中程序员的定义为: 拥有编程技能,在IT.互联网公司打工的IT从业人员.程序员与很多行业最大的不同是该行业的形成时间短:1954年第一台计算机才诞生,而中医 ...
- asp.net生成店铺推广二维码,二维码中间加logo(源码)
二维条码比一维条码记载数据量更多,二维码条码是一种高密度.高信息含量的便携式数据文件,是实现证件及卡片等大容量.高可靠性信息自动存储.携带并可用机器自动识读的理想手段.而且可以记载更复杂的数据,比如图 ...
- 《ASP.NET Core 高性能系列》关于性能的闲聊
一.通常的性能问题类型 让我们一起看看那些公共的性能问题,看看他们是或者不是.我们将了解到为什么我们常常在开发期间会错过这些问题.我们也会看看当我们考虑性能时语言的选择.延迟.带宽.计算等因素. 二. ...
- 19_05_01校内训练[polygon]
题意 把一个边长为1的正n边形放到一个正m边形中,要求m边形完全覆盖n边形,可以有交点,并且中心重合.求正m边形的最小边长,至少精确到6位.要求logn计算. 思考 先考虑m|n的情况. 我们知道,正 ...