🎉 响应式 HTTP JAVA 客户端 | CoApi 0.6.0 发布
CoApi - 同时支持响应式编程和同步编程模型的 HTTP 客户端
更新内容
- 特性: 支持将
URI
作为请求参数,以覆写请求地址 - 特性: 支持配置
scan packages
,以支持自动注入该包下的CoApi
接口 - 依赖: 升级
org.springframework.boot:spring-boot-dependencies
到v3.2.2
简介
在 Spring Framework 6 中,引入了全新的 HTTP 客户端 - Spring6 HTTP Interface。 该接口允许开发者通过使用 @HttpExchange
注解将 HTTP 服务定义为 Java 接口。
然而,当前版本尚未提供自动配置的支持,需要开发者自己实现配置。
虽然 Spring 生态中已经存在 Spring Cloud OpenFeign ,但它并未支持响应式编程模型。 为解决这个问题,Spring Cloud OpenFeign 推荐了替代方案 feign-reactive。然而,这个替代方案目前已处于不积极维护状态,并且不支持 Spring Boot 3.2.x。
CoApi 应运而生,它提供了类似于 Spring Cloud OpenFeign 的零样板代码自动配置的支持,同时支持响应式编程模型和同步编程模型。开发者只需定义接口,即可轻松使用。
安装
使用 Gradle(Kotlin) 安装依赖
implementation("me.ahoo.coapi:spring-boot-starter")
使用 Gradle(Groovy) 安装依赖
implementation 'me.ahoo.coapi:spring-boot-starter'
使用 Maven 安装依赖
<dependency> <groupId>me.ahoo.coapi</groupId> <artifactId>spring-boot-starter</artifactId> <version>${coapi.version}</version> </dependency>
使用
定义 CoApi
- 第三方接口
baseUrl
: 定义请求的基础地址,该参数可以从配置文件中获取,如:baseUrl = "\${github.url}"
,github.url
是配置文件中的配置项 }
@CoApi(baseUrl = "\${github.url}") interface GitHubApiClient { @GetExchange("repos/{owner}/{repo}/issues") fun getIssue(@PathVariable owner: String, @PathVariable repo: String): Flux<Issue> }
配置文件:
github: url: https://api.github.com
定义 CoApi
- 客户端负载均衡
@CoApi(serviceId = "github-service") interface ServiceApiClient { @GetExchange("repos/{owner}/{repo}/issues") fun getIssue(@PathVariable owner: String, @PathVariable repo: String): Flux<Issue> }
使用 CoApi
@RestController class GithubController( private val gitHubApiClient: GitHubApiClient, private val serviceApiClient: ServiceApiClient ) { @GetMapping("/baseUrl") fun baseUrl(): Flux<Issue> { return gitHubApiClient.getIssue("Ahoo-Wang", "CoApi") } @GetMapping("/serviceId") fun serviceId(): Flux<Issue> { return serviceApiClient.getIssue("Ahoo-Wang", "CoApi") } }
案例参考
服务提供者
TodoApi
: 规定了客户端消费方与服务提供者之间的共同契约,旨在防范重复冗余定义的风险,同时消除了服务提供者实现与客户端 SDK 的不一致性。TodoClient
: 客户端消费方通过TodoClient
访问服务提供者的 API。TodoController
: 服务提供者负责实现TodoApi
接口。
定义 API
@HttpExchange("todo") interface TodoApi { @GetExchange fun getTodo(): Flux<Todo> }
定义 Client
@CoApi(serviceId = "provider-service") interface TodoClient : TodoApi
实现 API
@RestController class TodoController : TodoApi { override fun getTodo(): Flux<Todo> { return Flux.range(1, 10) .map { Todo("todo-$it") } } }
服务消费者
服务消费者通过 @EnableCoApi
注解开启 CoApi
的自动配置。
@EnableCoApi(apis = [TodoClient::class]) @SpringBootApplication class ConsumerServer
@RestController class TodoController(private val todoClient: TodoClient) { @GetExchange fun getProviderTodo(): Flux<Todo> { return todoClient.getTodo() } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Tinker v1.9.14.26.3 发布,微信开源的 Android 热修复框架
Tinker 是腾讯开源的 Android 热解决方案库,它支持在不重新安装 apk 的情况下对 dex、library 和 resources 进行更新。Tinker v1.9.14.26.3 现已发布,具体更新内容如下: Bugfix & ChangeLog 回退:改用新的资源注入方式避免patch加载后多消耗两份resources.apk的虚拟内存。(此方法在部分机器上存在兼容性问题,会导致资源查找失败) 回退:系统主题发生变化时避免接入的App自杀。(不自杀会导致App资源id和资源内容错配) 将Tinker的service改为no-sticky方式启动,避免自动拉起进程以满足“App未经用户操作禁止自启动”的合规要求。 编译时问题修复:避免当所有满足loader pattern的class都被分到了非主dex时编译失败。 更新说明:https://github.com/Tencent/tinker/releases/tag/v1.9.14.26.3
- 下一篇
🎉 通用、灵活、高性能分布式 ID 生成器 | CosId 2.6.5 发布
CosId通用、灵活、高性能分布式 ID 生成器 官方文档https://ahoowang.gitee.io/cosid/ 更新内容 特性(doc): 支持在官方文档查看 JavaDoc 依赖: 升级com.github.spotbugs版本v6.0.6 依赖: 升级org.springframework.boot:spring-boot-dependencies版本v3.2.2 简介 CosId旨在提供通用、灵活、高性能的分布式 ID 生成器。 CosIdGenerator:单机 TPS 性能:1557W/s,三倍于UUID.randomUUID(),基于时钟的全局趋势递增 ID。 SnowflakeId:单机 TPS 性能:409W/sJMH 基准测试, 主要解决时钟回拨问题、机器号分配问题、取模分片不均匀问题并且提供更加友好、灵活的使用体验。 SegmentId: 每次获取一段 (Step) ID,来降低号段分发器的网络 IO 请求频次提升性能。 IdSegmentDistributor: 号段分发器(号段存储器) RedisIdSegmentDistributor: 基于Re...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块