SpringBoot + openFeign实现远程接口调用

news2024/11/26 12:29:00

SpringBoot服务之间通过openFeign实现远程接口调用

现在的微服务项目不少都使用的是springboot+spring cloud构建的项目,微服务之间的调用都离不开feign来进行远程调用。那么我们一个服务需要调用第三方的服务的时候,我们常常可能使用httpclient或者restTemplate等客户端api来实现远程调用,其实我们可以在微服务没有适用spring cloud框架的情况下,想调用第三方服务,也可以通过feign组件实现http的远程调用。

实现过程

1.首先创建服务端项目,提供数据接口

1.1添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

1.2 配置application.yml

application.yml:

server:
  port: 8080

spring:
  application:
    name: serviceDemo

1.3 实体类

User:

package com.example.servicedemo.entity;

import lombok.Data;

/**
 * 用户信息
 * @author qzz
 */
@Data
public class User {

    private Integer id;
    private String name;
    private Integer age;
}

1.4 添加控制器方法

UserController:

package com.example.servicedemo.controller;

import com.example.servicedemo.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * @author qzz
 */
@RestController
public class UserController {

    @RequestMapping("/api/user/getUserList")
    public List<User> getUserList(){
        //模拟数据库请求数据
        List<User> list = new ArrayList<>();
        User user = new User();
        user.setId(1);
        user.setName("Jack");
        user.setAge(31);
        list.add(user);
        return list;
    }
}

1.5 启动类

package com.example.servicedemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author qzz
 */
@SpringBootApplication
public class ServiceDemoApplication {

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

}

浏览器访问:http://localhost:8080/api/user/getUserList
在这里插入图片描述

2.创建客户端项目,调用服务端接口

2.1添加依赖

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

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

2.2 配置application.yml

application.yml:

server:
  port: 8081

spring:
  application:
    name: clientName

2.3 实体类

User:

package com.example.clientdemo.entity;

import lombok.Data;

/**
 * @author qzz
 */
@Data
public class User {

    private Integer id;
    private String name;
    private Integer age;
}

2.4 创建OpenFeign接口

注意:@FeignClient的name和value属性必填其一,另外url必填。

package com.example.clientdemo.feign;

import com.example.clientdemo.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

/**
 * openFeign接口
 * URL:就是远程端需要调用接口的服务URL路径,name:就是服务名,value和name一样
 * @author qzz
 */
@FeignClient(name = "serviceDemo",url = "http://localhost:8080")
public interface ServiceDemoFeign {

    /**
     * 获取用户列表
     * @return
     */
    @RequestMapping("/api/user/getUserList")
    List<User> getUserList();

}

2.5 添加控制器方法

UserController:


/**
 * @author qzz
 */
@RestController
public class UserController {

     /**
     * 注入OpenFeign接口
     */
    @Autowired
    private ServiceDemoFeign serviceDemoFeign;

    @RequestMapping("/api/client/user/getUserList")
    public List<User> getUserList(){
        return serviceDemoFeign.getUserList();
    }

}

2.6 启动类

启动类需要添加@EnableFeignClients注解。
加入EnableFeignClients开启Feign注解,使Feign的bean可以被注入

package com.example.clientdemo;

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

/**
 * @author qzz
 */
@EnableFeignClients
@SpringBootApplication
public class ClientDemoApplication {

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

}

2.7 测试效果

浏览器访问:http://localhost:8081/api/client/user/getUserList
在这里插入图片描述
返回结果成功,说明服务调用成功。

完整代码

点击此处进行下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正大国际期货:2022正大期货在国际市场热度不减的几点原因

2022年国际期货是金融行业重点关注的对象&#xff0c;从今年市场数据中可以看出&#xff0c;正大国际期货之所以还能一如既往领跑&#xff0c;每年交易量都在递增&#xff0c;和正大后台的实力雄厚&#xff0c;坚守合作互赢的理念重大相关&#xff0c;接下来重点说说正大国际越…

【ML-SVM案例学习】svm实现手写数字识别

文章目录前言一、源码分步解析1.引入库2. 设置属性防止中文乱码3.加载数字图片数据4.获取样本数量&#xff0c;并将图片数据格式化5.模型构建6.测试数据部分实际值和预测值获取7.进行图片展示8.把预测错的值的 x值 y值 和y的预测值取出9.通过enumerate&#xff0c;分别拿出x值 …

Java的三大特性之继承

封装详见&#xff1a;Java的三大特性之封装 多态详见&#xff1a;Java的三大特性之多态 1.认识继承 继承的本质是对某一批类的抽象&#xff0c;从而实现对显示世界更好的建模。 extends “扩展” 子类是父类的扩展&#xff0c;子类继承了父类&#xff0c;就会有父类的全部方法…

强推这款键盘利器(Keychron),这次我彻底入坑了

嗨喽&#xff0c;大家好。还记得我今年五月份的时候&#xff0c;发布了一篇关于自己使用键盘的文章——>程序猿必备键盘推荐&#xff08;Keychron&#xff09;&#xff0c;实用炫酷两不误&#xff0c;这篇文章发布后引起了强烈的反响。身边的同学、朋友&#xff0c;包括一些…

Ubuntu20.4系统隐藏顶栏

注&#xff1a;Ubuntu20.4以上版本安装gnome-tweak-tool可以实现隐藏顶栏了&#xff0c;但20.4还需要安装一下扩展模块&#xff0c;教程如下&#xff1a; 在Ubuntu中有两个扩展工具都支持隐藏顶栏。 1、安装autohidetopbar。 sudo apt install gnome-shell-extension-autohid…

【web】JavaScript——Web APIs笔记小结 dom 样式属性(自定义属性+节点操作部分)

期中考完回来更新了 感觉进度真的好慢T^T&#xff0c;已经摸了快一个月的鱼了qwq&#xff01;&#xff01;&#xff01; 来源&#xff1a;JavaScript基础语法-dom-bom-js-es6新语法-jQuery-数据可视化echarts 目录 ⑦H5自定义属性 V.节点操作 ①节点层级 ※※父级节点 ※…

react事件系统(新老版本)

带着问题阅读探索 React 为什么有自己的事件系统&#xff1f;什么是事件合成 &#xff1f;如何实现的批量更新&#xff1f;事件系统如何模拟冒泡和捕获阶段&#xff1f;如何通过 dom 元素找到与之匹配的fiber&#xff1f;为什么不能用 return false 来阻止事件的默认行为&…

SpringCloudGateway--自动路由映射

目录 一、GateWay项目创建 二、子项目创建 三、测试调用 一、GateWay项目创建 首先启动本地nacos&#xff0c;具体可参考&#xff1a;Nacos Windows安装_雨欲语的博客-CSDN博客 新建工程项目spring_cloud_test,pom引入依赖&#xff1a; <parent><groupId>org.s…

单片机只会调库和复制别人的代码是什么水平?

单片机只会调库和复制别人的代码是什么水平&#xff1f;前言什么是调库&#xff1f;如何不调库点亮一个LED调库与不调库的区别为什么要操作寄存器结语前言 相信对于学习过单片机的同学对于调库这个操作都不陌生&#xff0c;大家都是从调别人的库阶段过来的&#xff0c;今天看到…

便捷记账本小程序+后台管理系统-JAVA【数据库设计、源码、开题报告】

第一章 绪 论 1.1选题背景 互联网是人类的基本需求&#xff0c;特别是在现代社会&#xff0c;个人压力增大&#xff0c;社会运作节奏高&#xff0c;随着互联网的快速发展&#xff0c;用户的需求也越来越高&#xff0c;用户也将越来越多依靠互联网而不是自己获取信息&#xff…

Go:进度条工具库 vbauerster/mpb 简介

文章目录简介核心能力示例单进度条渲染多进度条渲染小结简介 mpb是一个在终端进行进度条渲染的工具库 核心能力 支持多进度条 Multiple Bars: Multiple progress bars are supported支持动态设置进度条总值 Dynamic Total: Set total while bar is running支持动态增加 / 删…

【Unity Shader】屏幕后处理4.0:基于高斯模糊的Bloom

原本打算写高斯模糊和双重模糊两个实现Bloom方法的对比&#xff0c;但两个加在一起篇幅过长&#xff0c;于是拆成两篇文章来进行。 学习前建议应先搞清楚的几个概念 HDRLDRToneMapping几种模糊算法1 高斯模糊实现Bloom 最近一直在学习Unity Shader实现各种后处理效果&#x…

c++ - 第13节 - c++中的继承

1.继承的概念及定义 面向对象三大特性&#xff1a;封装、继承、多态注&#xff1a;面向对象不止这三个特性&#xff0c;还有其他特性&#xff0c;比如反射&#xff08;Java中的概念&#xff09;、抽象等封装的理解&#xff1a;&#xff08;1&#xff09;将c设计的stack类&#…

记一次艰难的上班历程

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 以下事件均为卢松松真实经历&#xff1a; 早上7点&#xff0c;小区又被静默了&#xff0c;几百号人堵在小区门口。 我不顾病毒传染的风险挤到了小区门口&#xff0c;问原因。 看门的说到&#x…

pumping lemma

正规语言版本 LLL是正规语言,则存在整数p≥1p\ge 1p≥1 对于任意长度大于等于ppp的字符串w∈Lw\in Lw∈L&#xff0c;wxyzwxyzwxyz,满足下面3个条件 ∣y∣≥1\left|y\right|\ge 1∣y∣≥1 ∣xy∣≤p\left|xy\right|\le p∣xy∣≤p ∀n≥0,xynz∈L\forall n\ge 0,xy^nz\in L∀n≥…

1997-2020年各省三废排放量和熵值法计算的环境规制综合指数(无缺失值)

1997-2020年各省三废排放量和环境规制综合指数 1、包括&#xff1a;30个省份 2、指标包括&#xff1a;工业二氧化硫排放量、工业烟尘排放量和工业废水排放量 环境规制综合指数是由工业废水排放量、工业 SO2 排放量以及工业烟尘排放量计算而来 &#xff08;表格中有详细的三…

网络流量监测与调度技术研究

网络流量监测与调度技术研究网络流量监测与调度技术研究学习目标&#xff1a;流量监测学习内容&#xff1a;流量监测流量监测的设计框架框架一框架二框架三申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计…

零基础上手unity VR开发【Oculus账号体系准备】

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;Unity VR 开发成神之路 --【着重解决VR项目开发难&#xff0c;国内资料匮乏的问题。从零入门&#xff0c;一步一个脚印&#xff0c;带你搞定VR开发! &#x1f63b;&#x1f63b;】 &#x1f4d…

大数的乘法

输入一个大正整数和一个非负整数&#xff0c;求它们的积。 输入格式: 测试数据有多组&#xff0c;处理到文件尾。每组测试输入1个大正整数A&#xff08;位数不会超过1000&#xff09;和一个非负整数B&#xff08;int范围&#xff09;。 输出格式: 对于每组测试&#xff0c;…

[Leetcode刷题] - LC003 Longest Substring without repating character

题目链接 Leetcode 003Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.https://leetcode.com/problems/longest-substring-without-repeating-characters/ 题目描述 给定…