欢迎来到 黄石市某某代理教育中心
全国咨询热线:020-123456789
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

新闻中心
「技术分享」微服务开发的幸福感,是如何提升的?
  来源:黄石市某某代理教育中心  更新时间:2024-05-06 03:15:44

「技术分享」微服务开发的幸福感,是如何提升的?

阅读原文 :【技术分享】微服务开发的技术幸福感,是分享如何提升的?

点击关注“八戒技术团队”  ,阅读更多技术干货

随着微服务的微服务开流行,越来越多公司使用了微服务架构  ,幸福但由于公司业务的感何特殊性、技术栈的提升历史原因等 ,都需要选择一个适合自己公司的技术服务开发框架 ,对框架进行规范定义 ,分享集成自研组件和系统,微服务开让业务迭代实现更快速,幸福让开发人员使用更便捷 。感何

本文将基于SpringBoot,提升从框架约束 、技术自研中间件集成 、分享强类型客户端、微服务开接口文档等多个方面介绍服务框架的设计与实践。

一、背景介绍

公司后端服务是以Java生态为主,有基于Dubbo的RPC服务 、基于SpringBoot的HTTP服务两种开发模式,所有服务基于K8S的容器云双机房独立部署,支持双活流量的架构。

结合公司上下文环境 、业务规模 ,综合考虑技术栈统一、服务治理 、使用成本等多方面的因素,经过多部⻔商议,确定将“基于SpringBoot开发HTTP服务”作为主要开发模式 。公司每天都有一些新的微服务产生,很多自研组件服务和中间件系统 ,需要服务开发者单独接入,为了规范和简化后端服务开发者集成应用,一套规范 、集成的开发框架就变得非常有必要。

二 、基于SpringBoot的服务框架设计

1、如何统一规范框架的使用?

统一规范可以通过默认约定 、强制校验 、自动内嵌等多种方式来实现 ,下面将分别举例说明。

统一管理依赖包(默认约定)

基于Maven的依赖包管理 ,通过Partent统一定义依赖包及版本 ,默认引入必须的依赖包和插件。创建工程自动生成代码时 ,默认约定继承Parent ,开发者只需引入必要的Starter即可,开发者可以修改继承关系 ,但不推荐 。

依赖包的统一管理 ,可以避免不同版本包冲突的麻烦 ,也方便后期公司统一升级依赖包和版本 。

「技术分享」微服务开发的幸福感
,是如何提升的?

统一参数格式(强制校验)

返回参数都继承BaseResponse,请求参数都继承BaseRequest  。强制校验接口服务来保证参数规范性 ,在工程启动时自动检测 ,不遵循规范的工程将无法正常启动 ,绕过校验的工程不纳入公司后端体系 ,很多核心能力均无法正常使用 。

统一参数格式,不仅可以同时支持HTTP调用 、强类型客户端,同时规避了HTTP接口的滥用 ,简化规范了错误处理 。

「技术分享」微服务开发的幸福感
,是如何提升的?

统一处理异常(自动内嵌)

通过Spring的RestControllerAdvice可以对全局异常统一捕获,并对异常统一处理 。异常处理自动内嵌到核心包中 ,只要使用该框架,就自动生效  。

统一异常处理,不仅规范了异常返回格式 ,兼容了强类型客户端 ,日志统一记录,并对返回的异常信息进行脱敏处理 。

「技术分享」微服务开发的幸福感
,是如何提升的?


2 、如何简化自研中间件组件和系统的集成?

所有中间件依赖包都在Parent中统一管理 ,对于自研的通用类组件(比如日志组件、线程池组件、web安全组件、自研的工具类组件等),默认在Parent中已引入,开发者可以直接使用  。

公司有很多自研的中间件组件或系统,或者根据公司环境二次开发过的开源组件,只能按照公司的特定的方式进行接入使用 ,有一定的接入成本。为了接入更方便,都做成了可插拔的组件,通过Starter方式进行接入。

使用Starter方式 ,简化了依赖、简化了配置、简化了接入代码 。

「技术分享」微服务开发的幸福感,是如何提升的
?


作为后端服务 ,核心能力是对外提供服务 ,或者调用其他服务 。如果使用REST方式访问远程HTTP接口 ,难以将接口管理起来,当接口变动的时候可能需要修改多处。

在技术调研过程中,我们发现SpringCloud提供了OpenFeign来解决这个问题。


3、如何实现强类型的HTTP客户端?

OpenFeign是一种声明式、模板化的HTTP客户端,在Spring Cloud中使用OpenFeign ,只需要定义接口和注解,可以做到使用HTTP请求访问远程服务 ,就像调用本地方法一样。

但OpenFeign和我们公司技术环境不一致 ,加上太多历史项目也无法支持OpenFeign ,于是我们借鉴OpenFeign思想  ,基于开源Fegin开发了适合公司环境的ZbjFeign ,支持在SpringBoot和普通Spring环境中使用。

「技术分享」微服务开发的幸福感,是如何提升的	?

虽然实现了声明式调用 ,如果每次都要写接口定义和注解 ,还是很不方便 。为了解决这个问题 ,我们开发了一键发布Client包功能,通过扫描Controller接口方法元数据  ,基于ZbjFeign生成接口调用Client,构建打包发布到公司Maven仓库 。后端开发者只需引入一个包 ,就可以像调用本地接口一样调用远程HTTP接口。对于前端NodeJS调用,也生成了对应的生成物 ,支持前端框架的“强类型”调用。如果开发者要看接口文档 ,我们也提供全公司统一 、完整的接口文档 。


4  、如何实现文档的统一管理?

公司所有文档都是基于Confluence进行管理的,接口文档也不例外  ,于是我们也实现了在发布阶段 ,一键发布接口文档 。后台实现也是自动扫描Controller接口元数据,通过模版生成HTML片段 ,并提交到Confluence 。接口文档中提供了Java强类型客户端调用 、HTTP调用两种方式的参考。

「技术分享」微服务开发的幸福感
	,是如何提升的?

Client和文档都有了  ,接下来我们通过案例看一下如何使用 。

三、框架使用案例

1、Starter的使用案例

通过Starter方式使用分布式消息队列 RabbitMq ,只需要引入Starter ,就可以直接使用了。

第一步:引入依赖Starter 。

「技术分享」微服务开发的幸福感

,是如何提升的?


第二步:消费者监听队列消息。无需做任何配置 ,具体代码如下。

「技术分享」微服务开发的幸福感�	,是如何提升的?

说明:公司的RabbitMQ是经过二次开发的,不是通过“地址+账号”访问 ,而是通过申请的业务ID进行访问。



2 、强类型客户端使用案例

只需要引入Client包 ,无需做任何配置 ,就可以像调本地方法一样调HTTP服务 。

第一步:引入Client依赖。


「技术分享」微服务开发的幸福感,是如何提升的?


第二步:直接通过强类型进行HTTP接口调用,就像本地方法一样 。

「技术分享」微服务开发的幸福感,是如何提升的?

说明:客户端包生产时内置了远端服务的域名 ,如果发生变化可以从自研的配置中心修改 。

四 、未来框架的思考和展望

最后 ,给大家分享一下关于未来工作,我们的一些思考与规划,还不太成熟 ,抛出来和大家探讨一下 。

1、服务治理本文未涉及到服务治理相关部分(熔断 、限流等),是因为考虑到解耦、灵活性等多方面因素 ,我们并没打算像Dubbo或者SpringCloud , 通过代码库方式耦合在应用程序生命周期中 ,而是从应用生命周期脱 离出来,下沉到基础设施或者网络层,进行统一治理  。

2、应用可观测性微服务架构中,故障可能出现在任何地方,做可观测系统已经在我们 计划中 ,通过日志、链路跟踪、度量等手段,让各数据之间产生更多的关联,使每一次 App 点击所产生的多次服务调用耗时、返回值和参数都清晰可⻅ ,甚至可以下钻到第三方软件调用 、SQL请求、节点拓扑、网络响应等信息中。运维、开发和业务人员通过这样的观测能力可以实时掌握软件的运行情况,并获得前所未有的关联分析能力 ,以便不断优化业务的健康度和用户体验。

3、框架持续演进如今,技术与业务都发展非常快 ,后端框架也会在一定范围内不断升级重构,以适应变化的技术和业务需求。本框架设计都是面向服务接口调用 ,未来可能也会引入消息驱动设计,处理一些异步化的场景 , 甚至重构升级为事件驱动的架构。当然 ,在业务高速迭代的情况下 , 也需要考虑架构演进与业务发展之间的平衡 。


希望以上内容能对有需要的人有所帮助

欢迎大家留言写下自己希望了解的技术方向

欢迎大家一起探讨交流


友情链接狂热vs水星,水星人能否再次为热队降温?为保证最佳状态出战世界杯,苏亚雷斯将投阿甲劲旅河床任由亡父遗体在家腐烂被判刑 遗弃罪和故意杀人罪的区分布鲁斯-布朗2年超过1300万加盟掘金更新!北京疾控提醒:有以下情况人员,请主动报备2020款广汽三菱欧蓝德车联网功能无法使用是什么原因?新车 | 售12.68万元,北京现代伊兰特20周年纪念版上市,1.5升动力刘世博难堪大用,广州队想要完成保级,门将位置必须要做出改变英超直播:升班马晋升英超立马与狼队抢人!拉格能否守住?造型运动,6.8秒破百,13.89万起售,哈弗H6S年轻人的首选SUV?雷迪克:已被长城汽车选定为A30平台前、后轮毂单元供应商言車新车|14980元起!大阳混动复古踏板VRF150,配备TCS最后一代燃油Q5?2023年亮相,全新奥迪Q5内饰谍照曝光国王队记:交易市场对霍姆斯的兴趣不大 迈克-布朗对其很喜爱为武汉三镇队点赞,冲超之后仍未放弃三位过气老将,邓卓翔在列名记:KD已经数周没有与篮网交流了 他希望欧文得到一份长期合同日本新车销量大减,丰田陆地巡洋舰停止接单中国花游教母以权谋私,违规收取百万奖金,操纵比赛结果“寿星”侯森贡献5次神扑 国安0比0侥幸战平成都终于有人要了!英超升降机想要曼联弃将,却想着未来要退货新能源车上这些高级却令人崩溃的汽车配置,是特斯拉把路带偏了?4亿妄为!森林狼成联盟唯一一支有两位2亿美元先生的球队丰田卡罗拉:外观帅气,搭载1.5L+CVT,配双独立悬挂,油耗经济重回独行侠!老将麦基3年2010万美元签约哈弗酷狗正式亮相 或售12-15万 第三季度上市 搭载1.5T发动机美媒列哈登赛季数据:76人史上首位赛季场均20+5+10的球员国王队记:交易市场对霍姆斯的兴趣不大 迈克-布朗对其很喜爱标注食品虚假生产日期销售 沃尔玛一门店被罚温网第三轮郑钦文狂送10双误+36UE无缘16强 中国女单全军覆没揽胜极光冷车启动异响怎么解决?图片报:萨尔、理查兹和齐尔克泽等回到拜仁,今日进行体检下篇|完美复活经典款大众R36,在日趋相同下做点与众不同的事来美媒:通用汽车电动悍马生产进度缓慢,日产量仅约12辆温网第三轮郑钦文狂送10双误+36UE无缘16强 中国女单全军覆没特斯拉上半年交付量为56.5万辆WNBA赛事推荐预测:7.3 芝加哥天空 VS 凤凰城水银,客队不至于惨败昨天女排比赛在保加利亚站,报道把波兰说成东道主,有的蒙马拉西亚将飞往曼彻斯特,亨德森完成租借,萨拉赫周薪35万欧与日产纳瓦拉互为姊妹版 三菱全新一代L200皮卡预计明年亮相李春江再现大手笔引援,北京队国手即将加盟,上海男篮继续高投入
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

0.2011

Copyright © 2024 Powered by 黄石市某某代理教育中心   sitemap