18.springcloud实战项目-整合openfeign实现声明式远程调用

关键词:

SpringCloud实战项目全套学习教程连载中

PassJava 学习教程

简介

  • PassJava-Learning项目是PassJava(佳必过)项目的学习教程。对架构、业务、技术要点进行讲解。
  • PassJava 是一款Java面试刷题的开源系统,可以用零碎时间利用小程序查看常见面试题,夯实Java基础。
  • PassJava 项目可以教会你如何搭建SpringBoot项目,Spring Cloud项目
  • 采用流行的技术,如 SpringBoot、MyBatis、Redis、 MySql、 MongoDB、 RabbitMQ、Elasticsearch,采用Docker容器化部署。

更好的阅读体验

文档连载目录

Spring Cloud 整合 OpenFeign实现声明式远程调用

1.Feign 概述

  • Feign声明式客的HTTP客户端,让远程调用更简单。
  • 提供了HTTP请求的模板,编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息
  • 整合了Ribbon(负载均衡组件)和Hystix(服务熔断组件),不需要显示使用这两个组件
  • Spring Cloud Feign 在Netflix Feign的基础上扩展了对SpringMVC注解的支持

2. 远程调用示例

示例:查询用户的学习时长

用户微服务passjava-member调用学习微服务passjava-study的方法

1.引入openfeign依赖

passjava-member和passjava-study项目的pom文件引入openfeign依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.StudyTimeController定义远程调用测试方法

返回某个用户学习题目的总时长

@RequestMapping("/member/list/test")
public R memberStudyTimeTest() {
    StudyTimeEntity studyTimeEntity = new StudyTimeEntity();
    studyTimeEntity.setTotalTime(100); // 学习时长:100分钟
    studyTimeEntity.setQuesTypeId(1L); // 题目类型:1 (javaBasic)

    return R.ok().put("studyTime", Arrays.asList(studyTimeEntity));
}

3.member目录下创建feign service

  • 创建package: com.jackson0714.passjava.member.feign

  • 创建StudyTimeFeignService接口

  • 添加注解@FeignClient。显示声明这个接口用来远程调用study服务。

    @FeignClient("passjava-study")
    public interface StudyTimeFeignService {}
    
  • 添加远程调用方法

    public R memberStudyTime();
    
  • 给方法添加要远程调用的方法的路径study/studytime/member/list/test

    @RequestMapping("study/studytime/member/list/test")
    public R getMemberStudyTimeListTest();
    
  • 添加注解@EnableFeignClients开启远程调用服务。

    给类PassjavaStudyApplication.java添加注解@EnableFeignClients

    basePackages代表自动扫码指定路径下所有带有@FeignClient注解的接口。

    @EnableFeignClients(basePackages = "com.jackson0714.passjava.member.feign")
    @EnableDiscoveryClient
    @MapperScan("com.jackson0714.passjava.member.dao")
    @SpringBootApplication
    public class PassjavaMemberApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(PassjavaMemberApplication.class, args);
        }
    
    }
    
  • 测试接口

    studytime和member都有数据,学习时长:100分钟,昵称:悟空聊架构

    接口测试结果

4.测试OpenFeign传参

示例:用户id作为参数在服务间传递

MemberController

@RequestMapping("/studytime/list/test/{id}")
public R getMemberStudyTimeListTest(@PathVariable("id") Long id) {
    //mock数据库查到的会员信息
    MemberEntity memberEntity = new MemberEntity();
    memberEntity.setId(id); // 学习时长:100分钟
    memberEntity.setNickname("悟空聊架构");

    //远程调用拿到该用户的学习时长(学习时长是mock数据)
    R memberStudyTimeList = studyTimeFeignService.getMemberStudyTimeListTest(id);
    return R.ok().put("member", memberEntity).put("studytime", memberStudyTimeList.get("studytime"));
}

StudyTimeFeignService

@FeignClient("passjava-study")
public interface StudyTimeFeignService {
    @RequestMapping("study/studytime/member/list/test/{id}")
    public R getMemberStudyTimeListTest(@PathVariable("id") Long id);
}

StudyTimeController

@RequestMapping("/member/list/test/{id}")
public R memberStudyTimeTest(@PathVariable("id") Long id) {
    StudyTimeEntity studyTimeEntity = new StudyTimeEntity();
    studyTimeEntity.setTotalTime(100); // 学习时长:100分钟
    studyTimeEntity.setQuesTypeId(1L); // 题目类型:1 (javaBasic)

    return R.ok().put("studytime", Arrays.asList(studyTimeEntity));
}

3.总结FeignClient使用方法

  • 引入OpenFeign依赖
  • 定义FeignClient接口类(注解@FeignClient),声明这个接口类是用来远程调用其他服务的
  • 接口类中定义要远程调用的接口方法,指定远程服务方法的路径
  • Controller类中调用接口方法
  • 开启远程调用(注解@EnableFeignClients

代码地址

https://github.com/Jackson0714/PassJava-Platform

公众号

公众号

sparkstreaming实时流处理项目实战sparkstreaming整合kafka实战一(代码片段)

SparkStreaming整合Kafka实战SparkStreaming对kafka的支持SparkStreaming整合kafka的两种方式receiver方式:基于线程拉取数据direct方式:直接连接模式1.Receiver-basedApproachkafka对接streaming实战SparkStreaming对kafka的支持sparkstreaming官 查看详情

重磅回归-ssm整合进阶项目实战之个人博客系统

...输出:我自己实现的spring4+springmvc+mybatis3整合的进阶项目实战-个人博客系统已然完成了,系统采用mvc三层模式进行整体的开发,涉及到技术一下子很难全部列出,其中不得不提的有:整合shiro实现登录安全认证,整合lucene实现全... 查看详情

项目实战----简单整合springboot+mybatis+themyleaf小项目(代码片段)

简单整合SpringBoot+MyBatis+Themyleaf小项目一、项目环境搭建①二、数据库表设计及项目环境②三、图片验证码功能四、用户注册功能五、用户登录功能六、员工的查询所有七、员工添加功能八、员工修改功能九、常见Git命令十... 查看详情

17.springcloud实战项目-springcloud整合alibaba-nacos组件

SpringCloud实战项目全套学习教程连载中PassJava学习教程简介PassJava-Learning项目是PassJava(佳必过)项目的学习教程。对架构、业务、技术要点进行讲解。PassJava是一款Java面试刷题的开源系统,可以用零碎时间利用小程序查看常见面... 查看详情

sparkstreaming实时流处理项目实战sparkstreaming整合kafka实战一(代码片段)

SparkStreaming整合Kafka实战SparkStreaming对kafka的支持SparkStreaming整合kafka的两种方式receiver方式:基于线程拉取数据direct方式:直接连接模式1.Receiver-basedApproachkafka对接streaming实战SparkStreaming对kafka的支持sparkstreaming官网链接:... 查看详情

springboot实战项目整合阿里云rocketmq消息队列实现发送普通消息,延时消息(代码片段)

原文地址:Springboot实战项目整合阿里云RocketMQ消息队列实现发送普通消息,延时消息--附代码-学不会丶-博客园一.为什么选择RocketMQ消息队列?(可跳过看三的整合代码实例)首先RocketMQ是阿里巴巴自研出来的&#... 查看详情

我把github上最牛b的java教程和实战项目整合成了一个pdf文档

...你解决疑惑。不论你想要看Java教程方向的开源项目、Java实战项目、SpringBoot教程还 查看详情

springcloudalibaba实战

SpringCloudAlibaba实战1、新建SpringBoot项目2、整合SpringCloudAlibaba之前需先整合SpringCloud3、引入SpringCloud依赖管理<dependencyManagement><dependencies><depen 查看详情

springboot实战项目杂货铺登陆注册邮箱验证整合redis

在我们写程序时,特别是自己搭建一个程序时,除了要考虑到基本的功能实现,还要考虑到程序的高效性,高可用性能,以及一系列的保证程序运行健康的考虑,为未来我们工作打下坚实的基础。今天博主... 查看详情

疯狂讲义activiti6.x工作流进阶与项目实战,activiti整合drools

01Activiti介绍与搭建开发环境 02运行官方例子03编写第一个Activiti程序 04流程引擎配置与服务组件05Activiti数据库介绍06API(1)Activiti数据查询07API(2)流程文件部署08API(3)流程定义09API(4)任务操作10API(5)任务参数与附... 查看详情

云平台项目实战(华为篇)

   目前很多政府企业机房还是一个较为典型的传统数据中心,运行着企业的各种应用系统,为员工提供7*24信息化服务。中心机房采用传统的数据中心架构,多是单机运行应用,部分应用采用不同硬件平台的数据备份... 查看详情

项目实战之项目组成

...; 基于前面五篇react基本知识的介绍,从这篇开始项目实战。要想使一个项目运转起来,需要的知识可不只有react.前端采用react+anted+webpack,后台采用java.里面还有很多需要我们了解达到能够使用程度的知识:比如anted,webpack,SSO(Si... 查看详情

nginx+django-python+bpmn-js的整合工作流实战项目(代码片段)

前言找一个好用的画图工具真心不容易,Activiti工作流自带的Web版画图工具,外表挺华丽,其实使用起来各种拧巴;Eclipse的Activiti画图插件,对于相对复杂的流程也是很不友好。环境搭建网上有许多详细的安装配置步骤,这里就... 查看详情

ssm实战——秒杀系统前言

项目来源:慕课网http://www.imooc.com/learn/587项目开发流程:整合SSM框架——项目需求分析与实现——解决高并发优化所用技术:Maven:框架依赖包管理Mysql:设计表、Mysql语句编写Mybatis:用Mybatis进行持久化操作的DAO层接口设计与配... 查看详情

18.springcloud都有哪些组件?

SpringCloud的组件非常繁杂,拥有相当多的子项目,包括为人熟知的阿里开源的生态也融入其中,称之为SpringCloudAlibaba;在SpringCloud中,最为人熟知的当属SpringCloudNetflix了,它是由Netflix公司开源的,主要涵盖Eureka,Hystrix,Zuul,Ribbo... 查看详情

慕课网实战sparkstreaming实时流处理项目实战笔记二十之铭文升级版

...久发送一个请求去刷新当前的数据供展示统计慕课网当天实战课程从搜索引擎过来的点击量 数据已经在HBase中有的 自己通过Echarts整合SpringBoot 查看详情

springboot实战指南:整合elasticsearchswaggerredismq(代码片段)

文章目录一、Elasticsearch创建项目配置maven完善依赖es连接配置实体映射repositoryservicecontroller二、swagger依赖启动类路径匹配配置配置类controller注解三、redis四、springsecurity一、Elasticsearch官方文档Elasticsearch教程自己搭建了一个简单... 查看详情

gin框架项目实战(代码片段)

Gin框架项目实战简介查询数据json返回数据后记简介实现查找数据库用json格式返回前端查询数据将数据库的指定字段返回出来sql.go//个人信息查询funcInfo(accountinterface)(string,string,string,string,string,string) db,err:=sql.Open("mysql",sql... 查看详情