Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一起来学Spring Cloud(F版) | 第三篇:注解式HTTP请求Feign

一起来学Spring Cloud(F版) | 第三篇:注解式HTTP请求Feign

作者头像
battcn
发布于 2018-10-18 03:41:35
发布于 2018-10-18 03:41:35
63000
代码可运行
举报
文章被收录于专栏:battcnbattcn
运行总次数:0
代码可运行

文章第一时间送达到您的手中!

Spring Cloud 为开发者提供了在分布式系统中的一些常用的组件(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,决策竞选,分布式会话集群状态)。使用Spring Cloud开发人员可以快速地完成实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地工作

Feign

注解式的 Feign 使得 Java HTTP 客户端编写更方便。Feign 灵感来源于安卓网络编程框架 RetrofitJAXRS-2.0WebSocket,支持可插拔编码器和解码器,降低 HTTP API 的复杂度,通过最少的资源和代码来实现和 HTTP API 的连接。通过可定制的解码器和错误处理,可以编写任意的HTTP API。Spring Cloud Feign封装了 Ribbon 这一组件,所以在使用 Feign 同时还能提供负载均衡的功能,这一切只需要一个 @FeignClient即可完成。

早期版本的 FeignSpring Cloud 团队集成在 spring-cloud-netflix 子项目下,但如今 Spring Cloud团队将 Spring Cloud Feign 独立成一个单独的 spring-cloud-openfeign 项目

Try

准备三个工程,分别是 eureka-serverorder-serverproduct-server

Eureka Server

详情参考第一章,或从文末的 GITHUB 链接获取对应篇幅的完整代码

Product Server

一个普通的 Eureka Client 即可,详情参考上一章,或从文末的 GITHUB 链接获取对应篇幅的完整代码

Order Server

这个例子也是在上一章的基础之上做了扩展

依赖

对比上一章,此处多了一个 spring-cloud-starter-openfeign 的依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

配置文件

src/main/resources 目录下创建一个 bootstrap.yml 的文件,写上 eureka 相关配置信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server:
  port: 7072
spring:
  application:
    name: order-server
eureka:
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.instance_id:${server.port}}
  client:
    service-url:
      defaultZone: http://localhost:7071/eureka/

ProductClient 接口

创建一个 ProductClient ,是不是感觉和 XxxxService 看起来类似(用法都类似),都是接口文件只不过在这个文件的上方多了一个 @FeignClient 注解,多种写法,总有一款适合你

  • name:指定 FeignClient 的名称,该属性会作为微服务的名称,用于服务发现
  • value:同 name 字段互通
  • serviceId:指定服务ID,每个注册到注册中心上的客户端都会有对应的 serviceId 一般是 spring.application.name,与 namevalue 互通
  • url: 一般用于调试,可以指定一个详细地址(http://localhost:8080/products)
  • path: 请求统一路径,可以看成 @RequestMapping("/products")
  • decode404:404 错误时,调用 decoder 进行解码,否则抛出 FeignException
  • fallback:发生错误时,回调 hystrix 类/方法(后面会详细介绍)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.battcn.api;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @author Levin
 * @since 2018/9/26 0026
 */
@FeignClient(name = "product-server/products", decode404 = true)
//@FeignClient(name = "products", url = "http://localhost:7073/products")
//@FeignClient(value = "product", serviceId = "product-server", path = "/products", decode404 = true)
public interface ProductClient {

    /**
     * 根据产品ID查询产品信息
     *
     * @param productId ID
     * @return 查询结果
     */
    @GetMapping("/{product_id}")
    String selectProductById(@PathVariable("product_id") Long productId);
}

OrderController

直接使用 @Autowired 注入进去即可,然后调用就好了,对比较 Ribbon 这里我们看不到 RestTemplate 的代码了,也无需自己做解码映射,Spring Cloud Feign 默认都替我们实现好了,我们只需要遵循既定的标准即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.battcn.controller;

import com.battcn.api.ProductClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Levin
 * @since 2018/9/26 0026
 */
@RestController
@RequestMapping("/orders")
public class OrderController {

    @Autowired
    private ProductClient productClient;


    @GetMapping
    public String query() {
        return this.productClient.selectProductById(10L);
    }
}

主函数

通过 @EnableFeignClients 注解开启对 Feign 的支持,用习惯 Dubbo 的朋友喜欢将 API 打包成独立的 JAR ,这个时候需要指定 basePackage 属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.battcn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @author Levin
 */
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

}

总结

目前很多大佬都写过关于 Spring Cloud 的教程了,如有雷同,请多多包涵,本教程基于最新的 spring-cloud:Finchley.SR1 编写…

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 battcn 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Yolov8 源码解析(四十一)
ApacheCN_飞龙
2024/09/13
4500
Ultralytics x SwanLab:可视化YOLO模型训练
Ultralytics是YOLO官方团队推出的CV训练与推理框架,不仅支持目标检测任务,还支持分割、姿态识别、分类等更多任务。
用户9029617
2024/06/01
5510
Ultralytics x SwanLab:可视化YOLO模型训练
Yolov8 源码解析(四十三)
ApacheCN_飞龙
2024/09/13
2500
30分钟吃掉YOLOv8实例分割范例
本范例我们使用 torchkeras来实现对 ultralytics中的YOLOv8实例分割模型进行自定义的训练,从而对气球进行检测和分割。
lyhue1991
2023/09/17
2.6K1
30分钟吃掉YOLOv8实例分割范例
Yolov8 源码解析(四十四)
ApacheCN_飞龙
2024/09/13
2470
【他山之石】Pytorch Lightning 完全攻略
“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。
马上科普尚尚
2021/03/17
3.1K0
【他山之石】Pytorch Lightning 完全攻略
Yolov8 源码解析(四十二)
ApacheCN_飞龙
2024/09/13
3760
YOLOv8 训练自己的数据集
本范例我们使用 ultralytics中的YOLOv8目标检测模型训练自己的数据集,从而能够检测气球。
lyhue1991
2023/09/05
3.3K1
YOLOv8 训练自己的数据集
YOLOv8猫狗检测:从SwanLab可视化训练到Gradio Demo网站
基于YOLO模型在自定义数据上做训练,实现对特定目标的识别和检测,是CV领域非常经典的任务,也是AI项目落地最热门的方向之一。
用户9029617
2024/05/28
8150
YOLOv8猫狗检测:从SwanLab可视化训练到Gradio Demo网站
训练日志刷屏使我痛苦,我开发了VLog
例如,通过callback嵌入到lightgbm/catboost/transformers/ultralytics,乃至keras库的训练代码流程中~
lyhue1991
2023/11/13
3010
训练日志刷屏使我痛苦,我开发了VLog
使用YOLOv8检测棋盘棋子
本文作为yolov8的手把手教程呈现~ 在本文的基础上,可以为任何目标检测任务训练模型。训练定制YOLO模型可能相当复杂,尤其是对于初学者。训练和测试模型有一些共同的步骤,对于每项任务,这些步骤几乎相同。因此,我们将尽量用最简单的示例介绍一个完整的训练流程。
小白学视觉
2024/12/05
1580
使用YOLOv8检测棋盘棋子
基于Yolov8网络进行目标检测(三)-训练自己的数据集
前一篇文章详细了讲解了如何构造自己的数据集,以及如何修改模型配置文件和数据集配置文件,本篇主要是如何训练自己的数据集,并且如何验证。
python与大数据分析
2023/09/18
2.6K0
基于Yolov8网络进行目标检测(三)-训练自己的数据集
手把手入门教程:YOLOv8如何训练自己的数据集,交通信号灯识别
Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,从CPU到GPU。
AI小怪兽
2023/11/03
7.1K0
基于YOLOv8的遥感SAR舰船小目标识别
本文摘要:基于YOLOv8的遥感SAR舰船小目标,阐述了整个数据制作和训练可视化过程
AI小怪兽
2024/01/12
1.4K2
基于YOLOv8的摄像头下铁路工人安全作业检测(工人、反光背心和安全帽)系统
💡💡💡本文摘要:基于YOLOv8的铁路工人安全作业检测系统,属于小目标检测范畴,并阐述了整个数据制作和训练可视化过程​
AI小怪兽
2024/04/15
8090
YOLOv11 架构改进 & 常见指令
今天我们介绍 YOLOv11,这个系列中的最新成员。YOLO 是一个在目标检测领域几乎无与伦比的算法,它产生了非常成功的结果。这个算法系列在 YOLOv5 之后由 Ultralytics 继续开发,并且每个新模型都带来了更好的性能。
小白学视觉
2024/10/30
9570
YOLOv11 架构改进 & 常见指令
【目标检测】YOLOv8:快速上手指南
YOLOv8是YOLOv5团队在今年新推出的一代YOLO版本,与前几代版本相比,其性能和速度差距如下图所示:
zstar
2023/09/13
4.3K0
【目标检测】YOLOv8:快速上手指南
实战 | 使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
如上图所示,现实生活中路面坑洞对车辆和驾驶员安全来说存在巨大隐患,本文将介绍如何使用YoloV8图像分割技术来检测路面坑洞,从而提示驾驶员注意避让,尽可能保证安全。
Color Space
2024/03/02
1.4K0
实战 | 使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
YOLOv8创新改进专栏介绍
数据集大小:427张,进行3倍数据增强得到1708张,最终训练集验证集测试集随机分配为8:1:1
AI小怪兽
2023/11/08
1.2K0
YOLOv8 OBB实现自有数据集缺陷旋转检测,从数据标记格式转换到训练的手把手教程
💡💡💡本文内容:YOLOv8 OBB实现自有数据集缺陷旋转检测,从数据标记到训练的手把手教程
AI小怪兽
2024/01/20
6.8K3
相关推荐
Yolov8 源码解析(四十一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验