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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 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和一些实体类定义,一般不会有微服务实现的代码逻辑。

目录
相关文章
|
3月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
77 1
|
3月前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
230 0
|
2月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
75 5
|
2月前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
48 1
|
2月前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
63 2
|
2月前
|
Java 对象存储 开发者
微服务世界的双雄争霸:Spring Cloud与Netflix OSS——谁将引领下一次企业级应用变革的风暴?
Spring Cloud与Netflix OSS是微服务架构的核心组件集,分别以其与Spring Boot的紧密集成及为大规模分布式系统设计的特性,在Java开发社区中广受青睐。前者通过Eureka提供服务发现机制,简化服务注册与定位;后者借助Hystrix增强系统弹性和可靠性,避免雪崩效应。此外,二者还包含负载均衡(Ribbon)、声明式HTTP客户端(Feign)及API网关(Zuul)等功能,共同构建强大微服务体系,助力开发者聚焦业务逻辑,提升系统灵活性与性能。
44 0
|
2月前
|
Cloud Native Java 对象存储
揭秘微服务架构之争:Spring Cloud与Netflix OSS巅峰对决,谁将称霸弹性云原生时代?
近年来,微服务架构成为企业应用的主流设计模式。本文对比了两大热门框架Spring Cloud和Netflix OSS,探讨其在构建弹性微服务方面的表现。Spring Cloud依托Spring Boot,提供全面的微服务解决方案,包括服务注册、配置管理和负载均衡等。Netflix OSS则由一系列可独立或组合使用的组件构成,如Eureka、Hystrix等。两者相比,Spring Cloud更易集成且功能完善,而Netflix OSS则需自行整合组件,但灵活性更高。实际上,两者也可结合使用以发挥各自优势。通过对两者的对比分析,希望为企业在微服务架构选型上提供参考。
50 0
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14854 28
|
3月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】