ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Fegin Client-入门小试

2022-01-18 23:32:39  阅读:216  来源: 互联网

标签:Fegin pom spring nacos 接口 alibaba Client 小试 cloud


Fegin Client-入门小试

文章目录

1 接口提供者

1.1 配置 :pom.yml 和 bootstrap.yml

1) pom.xml 添加以下依赖

artifactId说明版本
spring-cloud-starter-alibaba-nacos-discoverynacos注册中心依赖包
spring-boot-starter-actuator监控检查
spring-cloud-starter-alibaba-nacos-confignacos配置中心依赖支持
spring-cloud-dependenciesSpring Cloud beginGreenwich.SR2
spring-cloud-alibaba-dependenciesSpring Cloud Alibaba begin2.1.0.RELEASE
  • 注意版本问题,spring-boot 、spring-cloud 以及 spring.cloud.alibaba

  • 和 的区别

    主要管理版本,对于子类继承同一个父类是很有用的,集中管理依赖版本不添加依赖关系,对于其中定义的版本,子pom不一定要继承父pom所定义的版本。 中的jar直接加到项目中,管理的是依赖关系(如果有父pom,子pom,则子pom中只能被动接受父类的版本);

2) bootstrap.yml

  • bootstrap.yml和application.yml的区别

    a. 使用spring cloud 需要bootstrap.yml在项目加载之前提供server配置信息,作为引导配置。

server:
  port: 9005
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myqx?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 1234
  application:
    name: itcast-map
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848

1.2 提供接口

@Autowired
private UserInfoService userInfoService;

@GetMapping("/get")
public List<UserInfo> findAll() {
    List<UserInfo> result = userInfoService.findAll();
    return result;
}

这里只暴露了配置和接口,细节上就是CURD的简单接口实现,不必关注,知道调通了就行

2 服务调用者

2.1 配置 :pom.yml 和 bootstrap.yml

相比服务提供者不需要业务依赖项,如mybatis-plus、mysql等,同样需要nacos注册中心依赖包、监控检查、nacos配置中心依赖,需要添加远程调用和Feign依赖。

<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <!-- Spring Cloud 版本信息 -->
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
        <!--  Spring Cloud Alibaba 版本信息 -->
        <spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
</properties>
<!-- 父工程 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencyManagement>
    <dependencies>
        <!-- Spring Cloud begin-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- Spring Cloud end-->
        <!-- Spring Cloud Alibaba begin-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring.cloud.alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- Spring Cloud Alibaba end -->
    </dependencies>
</dependencyManagement>

<dependencies>
    <!--SpringMVC-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--工具包-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
    <!-- lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.10</version>
        <scope>provided</scope>
    </dependency>
    <!-- restTemplate 远程调用 -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.5</version>
    </dependency>
     <!-- nacos注册中心依赖包 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!-- 监控检查-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!-- nacos配置中心依赖支持 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

    <!-- feign调用 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

2) bootstrap.yml

server:
  port: 9013

spring:
  application:
    name: itcast-nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848

2.2 启动类

在启动类上需要添加@SpringBootApplication、@EnableDiscoveryClient、@EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients    // 开启远程调用
public class NacosApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosApplication.class, args);
    }

}

2.3 接口

与接口调用者在Controller写接口不一样的是,服务调用者是创建接口类的方式使用@FeignClien注解实现

  • @FeignClien注解

    @FeignClient标签的常用属性如下:

    • name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现

    • url: url一般用于调试,可以手动指定@FeignClient调用的地址

    • decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException

    • configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract

    • fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口

    • fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码

    • path: 定义当前FeignClient的统一前缀

    1、接口提供方在注册中心。

    如果服务提供方已经注册到注册中心了,那么name或者value的值为:服务提供方的服务名称。必须为所有客户端指定一个name或者value
    @FeignClient(value=“run-product”,fallback = ProductClientServiceFallBack.class)

    2、单独的一个http接口,接口提供方没有注册到注册中心。
    @FeignClient(name=“runClient11111”,url=“localhost:8001”)
    此处name的值为:调用客户端的名称。

@FeignClient(value = "itcast-map",fallback = UserHystrix.class)
public interface UserFegin {

    @GetMapping("user/get")
    public List<UserInfo> findAll();
}

2.4 容错处理类

@Component
public class UserHystrix implements UserFegin {
@Override
public List<UserInfo> findAll() {
    return null;
	}
}

2.5 UserController

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private UserFegin userFegin;

    /**
     * 参数
     * @return
     */
    @GetMapping("/test006")
    public String feignClien() {
        List<UserInfo> all = userFegin.findAll();
        System.out.println(all);
        return "myqxin";
}

3 nacos

3.1 启动本地nacos

没有搭建nacos的可以参考 windows安装nacos搭建注册中心

在这里插入图片描述

3.2 启动两个项目服务

在nacos中查看两个服务说明注册成功

在这里插入图片描述

请求:http://localhost:9013/user/test006 ,效果如下

在这里插入图片描述

4 常见问题

  • spring-boot 、spring-cloud 以及 spring.cloud.alibaba 版本不一致

5 参考文献

使用nacos作为注册中心实现@FeignClient

windows安装nacos搭建注册中心

@FeignClient注解详解

标签:Fegin,pom,spring,nacos,接口,alibaba,Client,小试,cloud
来源: https://blog.csdn.net/WhyLearnCode/article/details/122571039

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有