6、微服务组件openfeign

news2024/11/24 1:30:54

1、在消费端的项目中引入openfeign依赖

首先需要确保引入了springcloud,因为openfeign依赖与springcloud

在消费端的pom.xml中引入openfeign,父项目中已经引入了springcloud了

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springalibabanew</artifactId>
        <groupId>com.chinasofti</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>order-openfeign</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos-服务注册发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--添加openfeign依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
</project>

父项目的pom.xml已经引入了springcloud

 2、添加openfeign接口和方法

openfeign是解决服务之间调用的,我们之前在订单中调用库存的服务了,我们尽量让feign的名字和库存的服务的名字保持一致,这样方便使用,同样的方法也用controller中的方法,controller中怎么定义的这边就怎么调用,比如原先的StockController

package com.chinasofti.stock.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author mxx
 * @Date 2023/6/12 16:48
 * @Version 1.0
 */
@RestController
@RequestMapping("/stock")
public class StockController {
    @Value("${server.port}")
    String port;
    @RequestMapping("/reduct")
    public String reduct(){
        System.out.println("扣减库存");
        return "扣减库存:"+port;
    }
}

对应的openfeign接口如下:

package com.chinasofti.order.feign;

/**
 * @Author mxx
 * @Date 2023/6/15 11:00
 * @Version 1.0
 */

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * name指定调用rest接口所对应的服务名
 * path指定调用rest接口所在的StockController指定的RequestMapping
 */
@FeignClient(name="stock-service",path="/stock")
public interface StockFeignService {
    //声明需要调用的rest接口对应的方法,将原先的StockController中的方法复制过来
    @RequestMapping("/reduct")
    String reduct();
}

3、客户端调用代码修改

原先使用了restTemplate,现在将这个删除掉

 将创建的feign注入到OrderController中,然后调用里面的方法,如下:

package com.chinasofti.order.controller;

import com.chinasofti.order.feign.StockFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @Author mxx
 * @Date 2023/6/12 16:44
 * @Version 1.0
 */
@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    StockFeignService stockFeignService;
    @RequestMapping("/add")
    public String add(){
        System.out.println("下单成功");
        String msg = stockFeignService.reduct();
        return "Hello Feign!"+msg;
    }
}

但是这样stockFeignService下边有个波浪线,如下

 我们需要在启动类中加入@EnableFeignClients注解,如下:
 

package com.chinasofti.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @Author mxx
 * @Date 2023/6/12 16:55
 * @Version 1.0
 */
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class,args);
    }
}

这样那个波浪线就消失了。修改端口为8040,然后启动订单和stock服务

启动成功后通过浏览器访问,如下:

 

 openfeign就调用成功了。

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

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

相关文章

行云创新CloudOS助力蜂巢能源获中国信通院2023云原生应用优秀案例奖

2023 年 6 月 6 日&#xff0c;工业和信息化部主办的ICT 中国高层论坛-云原生产业高峰论坛成功举办&#xff0c;活动期间&#xff0c;中国信通院发布了“2023云原生应用优秀案例奖”获奖名单。其中&#xff0c;蜂巢能源作为中国新能源行业的代表之一&#xff0c;凭借其基于行云…

IKEA EDI项目开源介绍

近期为了帮助广大用户更好地使用 EDI 系统&#xff0c;我们根据以往的项目实施经验&#xff0c;将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后&#xff0c;只需要下载我们整理好的示例代码&#xff0c;并放置在知行之桥指定的工作区中&#xff0c;即可开始使用。 …

一次 Nacos 导致的 CPU 飙高问题完整复盘

今天下午突然 出现 测试环境 cpu飙高&#xff0c;干到了 60%&#xff0c;其他项目 响应时间明显变长。。。有点吓人&#xff0c;不想背锅 项目背景 出问题的项目是 需要连接各个不同nacos 和不同的 namespace 进行对应操作的 一个项目&#xff0c;对nacos的操作都是httpClien…

【工具】Maven加强版 — mvnd的使用

【工具】Maven加强版 — mvnd的使用 下载 Releases apache/maven-mvnd (github.com) 选对应的版本 我用的Windows版 1、安装 直接解压。 然后配置环境变量&#xff1a;将 bin 目录添加到 PATH 2、测试 打开CMD终端&#xff0c;输入 mvnd -v 可以看到如下信息表示安装成…

Linux入侵检测学习笔记2

查看异常流量&#xff1a; iftop&#xff1a;动态显示网络接口流量信息&#xff1a; iftop工具是一款实时流量监控工具&#xff0c;可用于监控TCP/IP连接等&#xff0c;必须以root用户的身份运行。 安装方法&#xff1a; yum install -y epel-release yum install -y iftop…

云服务器docker方式部署JAVA微服务

党建后端java微服务部署步骤&#xff08;采用docker部署&#xff09; 开通dua 开通端口号&#xff1a;8848、6379、8000 - 8010、9848、9849 step1&#xff1a;安装必要的一些系统工具 sudo apt-get update sudo apt-get install ca-certificates curl gnupg step2&#xff1a…

Spark SQL典型案例

文章目录 一、实现任务1、准备数据文件2、创建Maven项目3、修改源程序目录4、添加依赖和设置源程序目录5、创建日志属性文件6、创建HDFS配置文件7、创建词频统计单例对象 一、实现任务 1、准备数据文件 在/home目录创建words.txt hello scala world hello spark world scala…

使用 docker 搭建 mongodb 6 单节点副本集

1、拉取 mongodb 镜像 docker pull mongo 2、启动一个 mongodb 的容器&#xff0c;通过副本集的形式运行 docker run --name mongoRs -d -p 27017:27017 mongo --replSet rs0 --name 创建容器的名称。 自定义 -d 以守护进程方式启动容器 -p 2701:27017&#xff1a;MongoD…

Dockerfile 使用介绍

我们使用 Dockerfile 定义镜像&#xff0c;依赖镜像来运行容器&#xff0c;因此 Dockerfile 是镜像和容器的关键&#xff0c;Dockerfile 可以非常容易的定义镜像内容&#xff0c;同时在我们后期的微服务实践中&#xff0c;Dockerfile 也是重点关注的内容&#xff0c;今天我们就…

Android系统的问题分析笔记(9) - Android 中的 Uri 如何使用呢 ?

问题 Android 中常用的 uri 如何使用呢 &#xff1f;&#xff08;此篇分析基础为Android 7.1.1系统源码&#xff09;&#xff0c;参看Android官方说明&#xff1a;https://developer.android.com/reference/android/net/Uri&#xff0c;代码可在此查看&#xff1a;https://git…

python 模块, 包

C# 中模块&#xff0c;就好像要using dll文件 python 中模块 就是python文件 包括类、方法、变量等 from 模块名 import 功能名 功能名() import 模块名 和 from 模块名 import * 模块名都引入了&#xff0c;但使用有所区别 import 模块名 使用 模块名.功能名 from 模块名 impo…

天天使用MySQL,你知道MySQL数据库能抗多少压力吗?附(真实案例)

今天给大家分享一个知识点&#xff0c;是关于MySQL数据库架构演进的&#xff0c;因为很多兄弟天天基于mysql做系统开发&#xff0c;但是写的系统都是那种低并发压力、小数据量的&#xff0c;所以哪怕上线了也就是这么正常跑着而已&#xff0c;但是你知道你连接的这个MySQL数据库…

关于HTTP头部的重要事项,你可能不知道的!

HTTP请求就像向服务器请求某些内容&#xff0c;而HTTP响应则是服务器的回复。就像发送一条消息并收到回复一样。 HTTP请求头部是在发出请求时包含的额外信息&#xff0c;比如你要发送的数据类型或你的身份信息。在响应头部中&#xff0c;服务器提供有关发送给你的响应的信息&am…

【大学物理实验】示波器

文章目录 选择题选择题 函数信号发生器产生的电信号调节频率和调整幅度大小的旋钮是: A. 1,2 B. 2,3 C. 3,4 D. 1,4 正确答案: D 信号输入示波器Y2通道后,示波器面板上工作方式和内触发的选择应该是: A. 工作方式选Y1,内触发选Y2 B. 工作方式选Y2,内触发选Y2 C. 工作方…

day22--哈希

两数之和 哈希表的思想 以空间换时间&#xff0c;这是由于哈希表保存了键值对&#xff0c;其查找复杂度为O(1)。 解题思路为 定义哈希表hashmap&#xff0c;其存放的键值对为<取值&#xff0c;下标>。 从开始处遍历数组&#xff0c;对于第i个位置&#xff0c;在哈希表…

【字符串part02】| 28.实现strStr()、459.重复的子字符串

目录 ✿LeetCode28.实现strStr()❀ ✿LeetCode459.重复的子字符串❀ ✿LeetCode28.实现strStr()❀ 链接&#xff1a;28.实现strStr() 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 …

C++ gets函数与strlen函数详解

引言 今天在看y总视频师对下面这串代码颇感兴趣&#xff1a; #include <iostream> #include <string.h> using namespace std; int main() {char s[1000];gets(s);int n strlen(s);for (int i 0; i < n; i){int j i;while (j < n && s[j] ! ){…

【MyBatis】什么是MyBatis?

MyBatis 是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发。 说人话就是连接数据库并执行SQL的框架。 文章目录 0 JDBC简介及流程0.1 DriverManager / Connection0.2 ResultSet0.3 PreparedStatement1 SQL注入2 流程 1 MyBatis通过注解执行SQL语句1.1 MyBatis入门&…

简要介绍 | 神经辐射场(NeRF):原理、挑战与未来展望

神经辐射场(NeRF)&#xff1a;原理、挑战与未来展望 1. 背景介绍 随着深度学习和计算机图形学的不断发展&#xff0c;人工智能和图形学领域的交叉研究越来越多地受到关注。神经辐射场(NeRF)是其中一个极具潜力的研究方向&#xff0c;它结合了计算机图形学和深度学习&#xff0…

STM32驱动INMP441麦克风实现左右通道声音采集

一、参考原理图 1、INMP441 2、STM32 注意INMP441的第4引脚&#xff0c;用来选择左声道还是右声道。 二、代码生成 代码使用cubemx生成 1、iis设置 2、DMA设置 3、生成代码 三、代码修改 1、首先定义一个数组 #define BUFFER_SIZE (4)static uint32_t simpleBuf[BUFFER_S…