SpringBoot 和SpringCloud、 Nacos 与Netflix Feign 实现服务调用

97 阅读2分钟
// 服务调用 Netflix Feign
    // 基本概念
    // Feign 是 Netflix开发的声明式 模板化的HTTP客户端
    // Feign 可以帮助我们 更快捷 优雅的 调用HTTP api
    // Feign 支持多种注解
    // Spring Cloud  对 Feign 进行了增强 , 使Feign支持了Spring MVC注解
    //  Spring Cloud Feign 是基于 Netflix Feign 实现的 整合了Spring Cloud Ribbon(负载均衡)和Spring Cloud Hystrix(熔断器)
    //  Spring Cloud Feign 帮助我们定义和实现依赖服务接口的定义
    // 在 Spring Cloud Feign 的实现下 只需要创建一个接口并用注解方式配置他
    // 即可完成服务提供方的接口绑定

    // 前提条件: 把相互调用的服务在 Nacos 注册
    // 1. 引入相关依赖 在服务的 总模块下
//         <!--服务调用-->
//         <dependency>
//             <groupId>org.springframework.cloud</groupId>
//             <artifactId>spring-cloud-starter-openfeign</artifactId>
//         </dependency>

    //2. 在调用端(消费者)启动类 添加一个注解  @EnableFeignClients // 服务调用 注解
    //               注册中心
    // 消费者                         生产者
    //比如 你有 a b 两个模块 a 模块 需要调用 b模块 的接口
    // 就需要在a 模块的启动类上加上 这个注解

    //3. 在 调用端 编写调用代码  固定结构
    // 创建 interface 使用注解指定调用服务名称
    // 定义调用的方法路径

 //   固定结构
//    @FeignClient("service-oss")   //加入你要调用的服务的名称  在nacos服务列表中可以复制
//    @Component //交给Spring管理
//    public interface OssClient {
//
//        //测试分布式方法调用
//        // 复制你需要用的模块下的控制器里的 方法 加 路径注解 比如 post 你就 @PostMapping 注解
//        // 如果使用的是@PathVariable 这个来传参的话 一定要加参数名称 否则会出错 例:@PathVariable("testId",String testId)
//        // 路径 需要写完整路径
//        @PostMapping("/oss/addTest")
//        public R addTest(@RequestBody TestRequest testRequest);
//
//        //后续再用方法 往这里面添加  即可
//    }

    //4. 实现分布式模块调用

    //4.1    //注入其他模块方法调用的 接口
    //    @Autowired
    //    private OssClient ossClient;
    //4.2    //测试调用其他模块方法
    //        ossClient.addTest(testRequest);


    //5. 重启服务 测试 方法

以下开始测试

引入依赖

1.png

b模块下创建一个方法

2.png

a模块下尝试调用b模块下的方法

入口文件 加入注解

3.png

创建一个调用b模块的接口类

编写代码结构一般都是以下格式

4.png

服务的名称 可以去Nacos里查找 或者在配置文件中查找

5.png

在A模块某个类中 写调用b模块的方法

6.png