3.Soul网关接入与验证

简介: /

此章节将基于上一章节基础之上,引入Soul网关,至于Soul网关是干什么的,怎么做的,我们会在后续章节讲解,1-3章节侧重于搭建应用。
本章节的Soul网关接入,如果你1,2章节都是和我保持一致,那么只需要直接启动Soul网关即可,但是对应的provider,consumer应用是需要额外的代码接入的。
开发环境和第二章保持一致。

3.1 提供者接入Soul
3.1.1 pom
3.1.2 Controller

与之前不同的是,这里我们会在Controller增加一个注解,@SoulSpringMvcClient,标注其注册成为一个SoulSpringMvcClient对象。这里有两种方式,一种是全局,一种是下面示例文件的局部,我会在 3.1.3 配置文件具体讲解二者实现上的差异性。
其中@SoulSpringMvcClient(path = "/consumer/** "), ** 标识允许访问:consumer路径下全部,如果在当前Controller中,你只想部分暴露,那么更正为:
删除Controller上的:SoulSpringMvcClient(path = "/consumer/** ")
在对应需要暴露的接口上,加上全路径,如:  @SoulSpringMvcClien(path = "/consumer/getUserById")
3.1.3 配置文件
说明:
http:标注这里协议是Http,同样还有(dubbo等)
adminUrl:对应soul-admin启动的应用地址,端口
contextPath:对应注册进Soul的路由前缀(即我们后续通过网关访问的限制名,多个应用应不同)
appName:对应的应用名称,不配置的话,会默认取 dubbo配置中application 中的名称
full:true则表示代理全部,全局允许访问,权限很大;false表示非全局,只访问有注解的地方(推荐)
port:当前应用的启动端口,并非soul-admin或网关,需保持一直

另外,如果你在 application.yaml(properties) 中配置了context-path,请删除,这个配置对于Soul而言是无感知的,即你的配置文件中不应出现下面的servlet配置:
如果你在这里配置的:full是false,那么对应3.1.2章节就无需调整,如果是true,直接3.1.2关于SoulPringMvcClient相关注解即可。
3.2 消费者接入Soul
消费者相关配置,和提供者是一致的,这里不再赘述,直接贴出相关代码。
3.2.1 pom
3.2.2 Controller
3.2.3 配置文件
说明:
这里同时暴露出去了dubbo,http两套协议,dubbo对应的就是我们提供在Service层的代码,其变更很小,如下,只是增加了一个注解:@SoulDubboClient

@suf4j

@Service

@COmponent

publicclassUserserviceImplmplemensseservice

@souLDubbocLiet(ath"id"查找

@override

publicUserfindById(intid)

if(idKO)

log.info("非法请求,ID:伊",id);

returnnull;

user-newUser(1,"youzha",L,wDate();

Useru

Log.info("提供者返回数据:伊",user.tostringO));

returnuser;


dubbo,http提供的contextPath的路由前缀,需要保持不同,同时全局唯一(即不能和其他应用一致)
3.3 验证
前提:启动了zookeeper,启动了MySQL。
3.3.1 启动soul-admin
直接启动相关Application即可,登陆控制台查看:localhost:9093,用户名/密码:admin/123456。
成功之后,查看插件,注意这里确保二者开启,且配置项和我吻合:

G出时灵

Soul阿关官理

燃和欲君

用产管理

2018-06-141017735

关旺

天编

2020-07-0211:0049


其中:divide

插件

插件:

divide

配置:

*角色:

系统

状态:

取消

确定


zk:
{"register":"zookeeper://127.0.0.1:2181"}

插件

*插件:

dubbo

''register:"zookeeper//127.0.0.1:2181

*配置:

角色:

系统

状态:

确定

取消


3.3.2 启动soul-boostrap
直接启动相关Application即可。
3.3.3 启动soul-provider
直接启动相关Application即可,出现下面的日志则表示注册成功:

2020070610:04:05514INF08732

Lhttpcligntregistersuccess

mainJscSISpringMcclientBeanPostProcessor

C"appName":"provider",'context":"/provider","at

"host":172.16.30.188."port:90

path":"/provider/provider/*"pathbesc:"cype"t

"rulename:"/provider/provider/***enablue

2020-07-0610:04:05.526INF08732---

Mainl..a.ibboontiininostrocessoThepropertiesofbeannae

[beanproperty'name',beanproperty'id

dubbo-consumer]havebeenbindingbyvalues:[be

2029070610:04:05.528INF08732--

hain.aeia

dhbbocotizeeistyotoeninerye

2020-070610:04:05.531INF08732--

pl.faaofizuinntooio

main.+

.dubbo.config.otocolconfigohvebenindingyluey

rty'name'

2020-07-0610:04:05.837INFO8732

stor:InitializingExecutorSerice

p.5.5.cocurrent.ThredPooTkExecuto

main]

'applicationlaskExecutor'

2020-07-0610:04:06157INFO8732---

endpoint(S)beneathbasepath

Exposing

mainjo.s.b.a.e.web.EndpointlinksResolver

'/actuator'

dubboclientregistersuccess0

291007010:04:036

IndById""pathbesc:"ID查找""cpclype":"dubbo",.

apwdateHrowdenyodmt/

"spcExt":"0"'enabled":true]

INFO8732

127.0.0.1:2181]oqg.oteczklentkenea

2020070610:04:06576

:startingzkciienteventthread.

2020-07-0610:04:06.575

INFO8732

clientenvironment:zookeeperversion-3.4

[clientconnector]org.apache.7ookeeper.7ookeeper


3.3.4 启动soul-consumer
直接启动相关Application即可,出现下面的日志则表示注册成功:

lS.c.S.i.Spingcintenostrocessortitcce

202007-0610:05:59.986INFO6264

mainLs.c

[appName":"consumr."context":"/consumer"at

pptht:/eonsuconusteptpecYyphtt,

"ruleName":"consumer/consumer/**",

"enabled":true



注意:
3.3.3,3.3.4启动完成之后,查看soul-admin的网页管理端,应该出现下图:

G+

Soul关管理

透择启列表

操作

快妆铺

净安热

开白

博妆别

特改


Gl出变录

Soul关管理

进择日用录

达择蟹想可列表

惠雨时5

快被费

梅改

2020-07-04135446


3.3.5 验证
此时直接通过自身IP访问消费者,地址:http://localhost:9092/consumer/getUserById?id=1,查看日志:
消费者:

172.16.36.188].acom

2020070610:06:00.932

InitializingSpringDispatcherSere

INF06264

dispatcherSerylet'

2020070610:06:00.933INFO6264

172.16.30.188o.Swbserlet.Dispatchsle

InitializingSeryletdispatcherSerylet

2020-07-0610:06:00.943INFO6264

172.16.30.188.wbseret.Diatchr

initializationin10ms

2020070610:06:31950INF06264

[nio-9092-exec-5]c.y.dubbo.controller.consumeonroller

id-1

消费者获取用户,信息为:user(id-l,nameyouzha,

202007-0610:06:32.190INF06264-

---[n10-9092-exec-5]

cy.dubbo.controller.ConsumerController

nge-lbirthbayMonJu1061:6:2


提供者:

o.a.c.c.c.lTomcatj.[localhostJ.[]

InitializingSpringDispatcheSerlet

172.16.30.188

2020-07-0610:04:07.001

INFO8732

dispatcherSerylet'

D-172.16.30188]

InitializingeredipatcherSeret

2020-07-0610:04:07002INFO8732

o.5.web.serylet.DispatcherSerlet

D172.16.30.188]o.5.web.serlet.Dispatcherserlet

INFO8732

2020-07-0610:04:07026

Completedinitializationin18ms

cy.dubbo.service.impl.userserviceImpl

提供者返回效据:user(id-l,nameouzhaae

:20880-thread-2]

2020-07-0610:06:32.175INFO8732

2020)

birthDayMonJul0610:06:32CST


通过网关访问消费者,地址:http://localhost:9094/consumer/consumer/getUserById?id=1,查看日志:
消费者:

]cy.dubbo.controller.Consumeonrole

2020-07-0610:07:48.947INF06264

nio-9092-exec-6

消费者获取用户,信息为:user(id-l,name-youzha,

2020-07-0610:07:48.951INF06264

[nio-9092-exec-61

c.y.dubbo.controller.Consumercontroller

nge-lbirthDayMonul61:07:48CT2

2020)


提供者:

提供者返回数据:user(id-l,name-youzha,

]cy.dubbo,service.impluserserviceimpl

2020-07-0610:07:48.950INFO8732

20880-thread-

age-1,

birthDayMonJul0610:07:48CST020)



直接通过自身IP访问提供者,地址:http://localhost:9091/provider/hello?id=-1
通过网关访问提供者,地址:http://localhost:9094/provider/provider/hello?id=-1

Chrome POST验证provider的dubbo接口


fetch(new Request('http://localhost:9094/provider/provider-youzha/findById',{

method:'POST',

headers: {'Content-Type': 'application/x-www-form-urlencoded'},

body:"id=1"

})).then((resp)=>{console.log(resp)})

注意:
通过网关访问,其地址为boostrap对应的:ip+端口
访问地址需要加上路由前缀,即配置文件中 soul 模块中的contextPath
如果你的项目和soul不部署在同一服务器,请在你的配置文件中追加上该配置(以你实际部署机器IP为准),保证Soul能管理你的服务
soul.http.host=168.10.54.115

3.4 完整代码

Dubbo_Soul.rar(32 KB)

zookeeper.rar(70.7 MB)

redis.rar(4 MB)

Soul.rar(8.2 MB)

若有收获,就点个赞吧


相关文章
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
|
1月前
|
人工智能 边缘计算 C#
纯C#驱动全场景视觉AI:.NET 10+YOLO多模型平台赋能工业与边缘智能
基于.NET 10与YOLO技术的纯C#视觉AI平台,支持多模型并行、跨平台部署,集成目标检测、分割、姿态估计等全任务,无需Python依赖,助力工业质检、智能安防、零售分析等场景高效落地。
|
23天前
|
存储 人工智能 安全
AI智能体的开发费用
2026年AI智能体开发成本两极分化:低代码工具使简单Agent成本降至5千-2万元,而复杂企业级系统仍需30万以上。费用涵盖开发、API、算力及维护,建议从中级智能体切入,结合开源平台与工作流模式降本增效。#AI智能体 #降本策略
|
UED
一些 CSS3 动画的实际应用案例
一些 CSS3 动画的实际应用案例
529 57
|
程序员 C++
【实战指南】不到100行代码,封装一个通用毫秒级计时器(基于RAII思想)
本文介绍了一款基于RAII思想封装的通用毫秒级计时器,代码不到100行,简洁高效。通过C++的RAII(资源获取即初始化)原则,计时器在对象构造时自动记录起始时间,析构或调用接口时返回时间差,支持秒级和毫秒级精度。该设计减少了重复代码,提升了复用性和可维护性,适用于性能分析、超时检测等场景。使用时仅需定义对象并调用获取时间间隔的接口,极大简化了开发流程。
175 0
|
存储 安全 生物认证
强密码策略之减少字典攻击风险
【8月更文挑战第14天】
568 2
|
10月前
|
SQL XML Java
MyBatis——选择混合模式还是全注解模式?
在MyBatis开发中,Mapper接口的实现方式有两种:全注解模式和混合模式。全注解模式直接将SQL嵌入代码,适合小规模、简单逻辑项目,优点是直观简洁,但复杂查询时代码臃肿、扩展性差。混合模式采用接口+XML配置分离的方式,适合大规模、复杂查询场景,具备更高灵活性与可维护性,但学习成本较高且调试不便。根据项目需求与团队协作情况选择合适模式至关重要。
222 4
|
11月前
|
敏捷开发 人工智能 数据可视化
团队协作升级:Scrum 下的高效协同
这是一篇关于传统制造业在数字化变革背景下引入敏捷开发(Scrum)的实践分享。作者作为一名深耕16年的资深产品开发项目经理,面对需求频繁变化、团队协作壁垒及开发周期过长等问题,积极探索Scrum的应用。通过试点项目,推行每日站会与看板实现信息透明化,跨职能协作打破孤岛效应,短周期迭代快速响应变化,最终成功缩短开发周期20%,提升问题解决速度和团队满意度。尽管实施中面临管理层观念转变和硬件研发特殊性的挑战,但Scrum为团队带来了显著的价值,成为制造业敏捷转型的重要起点。文章呼吁更多团队加入敏捷实践,共同迎接未来挑战。
|
搜索推荐 算法
插入排序算法的平均时间复杂度解析
【10月更文挑战第12天】 插入排序是一种简单直观的排序算法,通过不断将未排序元素插入到已排序部分的合适位置来完成排序。其平均时间复杂度为$O(n^2)$,适用于小规模或部分有序的数据。尽管效率不高,但在特定场景下仍具优势。
|
开发框架 前端开发 JavaScript
使用代码生成工具快速生成基于ABP框架的Vue+Element的前端界面
使用代码生成工具快速生成基于ABP框架的Vue+Element的前端界面