微服务实战之春云与刀客(二)—— Spring cloud 实现仿RPC面向接口调用方式

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 像HSF、dubbo这种RPC框架,客户端都是通过接口(Interface)调用服务的,无须自己拼装调用方式,客户端就像调用本地类方法一样。而spring cloud原生的客户端调用时通过RestTemplate发起Http调用请求,需要手动指定URL和参数,在使用上比较费劲,后来出现了申明式服务调用——Spring Cloud Feign,终于使调用得到了解放,而本文就是讲述如何极致地利用Feign来进行微服务开发。

概述

像HSF、dubbo这种RPC框架,客户端都是通过接口(Interface)调用服务的,无须自己拼装调用方式,客户端就像调用本地类方法一样。而spring cloud原生的客户端调用时通过RestTemplate发起Http调用请求,需要手动指定URL和参数,在使用上比较费劲,后来出现了申明式服务调用——Spring Cloud Feign,终于使调用得到了解放,而本文就是讲述如何极致地利用Feign来进行微服务开发,如何定义代码结构规范。

RestTemplate

RestTemplate 可以认为就是对HttpClient的一个封装,可以把调用的结果转化成Java 对象,从而达到简化开发的目的。
下面简单用一个例子来说明一下(例子实际设计到了eureka注册中心,关于如何使用eureka注册中心这些可以自己查阅相关资料,这里忽略)。在服务器端,我们像正常开发Controller一样写一个hi的方法,返回一个简单的字符串。
image

然后在客户端,显示需要注册一个RestTemplate Bean,这里@LoadBalanced的注解就是开启客户端负载均衡的能力(前提还需要在入口类上添加@EnableDiscoveryClient注解开启服务发现)
image

然后就像http请求一样调用服务器的hi方法,然后得到返回结果。例子中的equipment-service 是服务Id(serviceId),实际调用时会根据服务发现的结果替换成服务的ip和端口号。

image

可以看出,这种直接拼链接的调用对于微服务开发很不友好,所以才有了Feign的诞生。

申明式服务调用:Spring Cloud Feign

还是刚才的例子,在服务器端写个hi方法:
image

剩下的就是客户端的事情了。
首先,客户端需要引入Feign(这里也只是简要说一下流程)
image
然后定义一个interface。这个接口是什么意思呢?它实际就是把RestTemplate调用的链接转成了接口和方法。如URL中的equipment-service放到了interface的@FeignClient注解里面,而URL的路径对应方法上的@RequestMapping,URL参数也对应方法的参数,通过这种方式,巧妙地把URL调用转化成了方法的调用。
image

定义好接口后,Feign在spring初始化的时候会自动扫描包含@FeignClient的接口并注册成spring bean,然后就可以直接使用了
image

Feign 的接口定义移到服务器端

上面的代码接口是在客户端定义的,无形中客户端多了这一块麻烦的工作,而比较合理的做法是由服务提供者来提供接口。
首先在服务端定义接口
image

然后服务器端新建一个Controller(注意是Controller)继承这个接口。
image

最后客户端只需引入这个接口,就像本地spring bean一样调用服务了,客户端是不用关系服务在哪台服务上面的。

image

微服务代码结构规范

在上面接口调用的基础上,我们可以总结出一套代码结构规范。

image

1、首先所有的微服务有一个根级的root pom,包含了spring cloud的版本等基本定义信息,同时也定义好统一的groupId。这个pom文件最大的好处就是统一了spring
cloud的版本,避免以后开发中出现的各种不兼容问题。
这个pom定义好后一般不轻易改变,如果接入新版本的spring cloud,则升级maven version再deploy到maven服务器即可。

<parent>
    <groupId>com.cehome.cloud</groupId>
    <artifactId>cehome-cloud-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

2、和root pom同目录下是各种微服务目录(项目),每种微服务为一个项目,每个项目下面再分为api(接口)和service(实现)模块。

3.一个服务开发的流程是这样的:
服务器端:在api模块定义服务接口,在service模块实现服务。
客户端:直接依赖api jar包即可调用服务,无须了解调用服务器地址和具体的URL。

例如对于user微服务,服务器端由user-api 和user-service两个模块,开发完后,user-api发布到maven服务器成user-api-1.0.0.jar;
客户端直接依赖user-api-1.0.0.jar,引用服务接口就可以调用服务。
注意user-api-1.0.0.jar是一个非常轻量级的jar包,只包含了interface和一些实体类定义,一般不会有微服务实现的代码逻辑。

目录
相关文章
|
2月前
|
人工智能 Java API
Spring AI 实战|Spring AI入门之DeepSeek调用
本文介绍了Spring AI框架如何帮助Java开发者轻松集成和使用大模型API。文章从Spring AI的初探开始,探讨了其核心能力及应用场景,包括手动与自动发起请求、流式响应实现打字机效果,以及兼容不同AI服务(如DeepSeek、通义千问)的方法。同时,还详细讲解了如何在生产环境中添加监控以优化性能和成本管理。通过Spring AI,开发者可以简化大模型调用流程,降低复杂度,为企业智能应用开发提供强大支持。最后,文章展望了Spring AI在未来AI时代的重要作用,鼓励开发者积极拥抱这一技术变革。
790 71
Spring AI 实战|Spring AI入门之DeepSeek调用
|
4月前
|
人工智能 搜索推荐 Java
Spring AI与DeepSeek实战三:打造企业知识库
本文基于Spring AI与RAG技术结合,通过构建实时知识库增强大语言模型能力,实现企业级智能搜索场景与个性化推荐,攻克LLM知识滞后与生成幻觉两大核心痛点。
483 7
|
3月前
|
安全 Java 数据库
Spring Security 实战指南:从入门到精通
本文详细介绍了Spring Security在Java Web项目中的应用,涵盖登录、权限控制与安全防护等功能。通过Filter Chain过滤器链实现请求拦截与认证授权,核心组件包括AuthenticationProvider和UserDetailsService,负责用户信息加载与密码验证。文章还解析了项目结构,如SecurityConfig配置类、User实体类及自定义登录逻辑,并探讨了Method-Level Security、CSRF防护、Remember-Me等进阶功能。最后总结了Spring Security的核心机制与常见配置,帮助开发者构建健壮的安全系统。
206 0
|
1月前
|
Cloud Native Java 微服务
Spring Boot 3.x 现代化应用开发实战技巧与最佳实践
本指南基于Spring Boot 3.x,融合微服务、云原生与响应式编程等前沿技术,打造现代化应用开发实践。通过构建智能电商平台案例,涵盖商品、订单、用户等核心服务,展示Spring WebFlux、OAuth 2.0认证、Spring Cloud Gateway路由、GraalVM原生编译等技术实现。同时提供Docker/Kubernetes部署方案及性能优化策略,助您掌握从开发到生产的全流程。代码示例详实,适合进阶开发者参考。
122 2
|
3月前
|
存储 人工智能 Java
Spring AI与DeepSeek实战四:系统API调用
在AI应用开发中,工具调用是增强大模型能力的核心技术,通过让模型与外部API或工具交互,可实现实时信息检索(如天气查询、新闻获取)、系统操作(如创建任务、发送邮件)等功能;本文结合Spring AI与大模型,演示如何通过Tool Calling实现系统API调用,同时处理多轮对话中的会话记忆。
681 57
|
3月前
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
265 5
|
8月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
399 6
|
8月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
193 1
|
7月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
524 70
从单体到微服务:如何借助 Spring Cloud 实现架构转型