从零开始学springboot整合feign跨服务调用的方法

下面是“从零开始学Spring Boot整合Feign跨服务调用的方法”的完整攻略:

1. 准备工作

1.1 创建两个Spring Boot应用

我们先创建两个Spring Boot应用,一个为服务提供方,一个为服务消费方。

# 服务提供方
$ curl https://start.spring.io/starter.zip \
    -d bootVersion=2.4.4 \
    -d baseDir=provider \
    -d dependencies=web > provider.zip
$ unzip provider.zip && rm provider.zip

# 服务消费方
$ curl https://start.spring.io/starter.zip \
    -d bootVersion=2.4.4 \
    -d baseDir=consumer \
    -d dependencies=web > consumer.zip
$ unzip consumer.zip && rm consumer.zip

1.2 添加Feign和Spring Cloud依赖

在服务提供方和消费方的pom.xml文件中,添加以下依赖:

<!-- 服务提供方 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<!-- 服务消费方 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

1.3 创建服务提供方API和实现类

我们在服务提供方中创建一个简单的API,提供一个返回字符串的方法。

@RestController
@RequestMapping("/hello")
public class HelloController {
    @GetMapping
    public String hello() {
        return "Hello";
    }
}

1.4 创建服务消费方API和实现类

我们在服务消费方中创建一个FeignClient,用于调用服务提供方的API。

@FeignClient(name = "provider", url = "http://localhost:8080")
public interface HelloClient {
    @GetMapping("/hello")
    String hello();
}

2. 整合Feign

2.1 创建@EnableFeignClients注解

为了使Spring能够自动配置Feign客户端,我们需要在服务消费方中添加@EnableFeignClients注解。

@SpringBootApplication
@EnableFeignClients
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

2.2 调用服务提供方API

我们在服务消费方中调用服务提供方的API,直接使用HelloClient接口中定义的方法即可。

@RestController
public class HelloController {
    @Autowired
    private HelloClient helloClient;

    @GetMapping("/hello")
    public String hello() {
        return helloClient.hello();
    }
}

3. 示例

下面我们通过两个示例,进一步了解如何使用Feign进行跨服务调用。

3.1 示例1:服务提供方提供随机数API

我们在服务提供方中添加一个返回随机数的API,代码如下:

import java.util.Random;

@RestController
@RequestMapping("/random")
public class RandomController {
    @GetMapping
    public int random() {
        return new Random(System.currentTimeMillis()).nextInt();
    }
}

我们在消费方通过Feign来调用该API,代码如下:

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

@FeignClient(name = "provider", url = "http://localhost:8080")
public interface RandomClient {
    @GetMapping("/random")
    int random();
}

我们在服务消费方的控制器中注入RandomClient,并调用其中的方法,如下所示:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RandomController {
    @Autowired
    private RandomClient randomClient;

    @GetMapping("/random")
    public int random() {
        return randomClient.random();
    }
}

3.2 示例2:服务提供方提供计算API

我们在服务提供方中添加一个接收两个数值参数,并返回它们的和的API,代码如下:

@RestController
@RequestMapping("/calc")
public class CalcController {
    @GetMapping
    public int calc(int a, int b) {
        return a + b;
    }
}

我们在消费方通过Feign来调用该API,代码如下:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = "provider", url = "http://localhost:8080")
public interface CalcClient {
    @GetMapping("/calc")
    int calc(@RequestParam("a") int a, @RequestParam("b") int b);
}

我们在服务消费方的控制器中注入CalcClient,并调用其中的方法,如下所示:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CalcController {
    @Autowired
    private CalcClient calcClient;

    @GetMapping("/calc")
    public int calc(@RequestParam int a, @RequestParam int b) {
        return calcClient.calc(a, b);
    }
}

至此,我们完成了整合Feign跨服务调用的过程,同时通过两个示例进一步了解了如何使用Feign进行跨服务调用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从零开始学springboot整合feign跨服务调用的方法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 教你用Java实现一个简单的代码生成器

    教你用Java实现一个简单的代码生成器 介绍 本篇攻略将指导读者实现一个简单的代码生成器,该生成器可以根据输入的参数生成指定模板的代码文件。该生成器基于Java语言实现,适用于Java开发者。 工具准备 为了编写该生成器,我们需要准备以下工具和环境: JDK(Java Development Kit) Maven(可以选择,不强制要求) 开发集成环境(IDE…

    Java 2023年5月18日
    00
  • 详解JSONObject和JSONArray区别及基本用法

    详解JSONObject和JSONArray区别及基本用法 1. JSONObject和JSONArray是什么? 在Java中,JSONObject和JSONArray都是JSON格式数据的提供者。 JSONObject对象表示一个JSON对象,即类似于{ “name”: “张三”, “age”: 18, “gender”: “male” }这样的数据结构…

    Java 2023年5月26日
    00
  • Spring整合SpringMVC与Mybatis(SSM)实现完整登录功能流程详解

    Spring整合SpringMVC与Mybatis(SSM)是一种常见的Java Web开发技术栈,它们可以协同工作来实现Web应用程序的开发。本文将详细讲解如何使用Spring整合SpringMVC与Mybatis(SSM)实现完整登录功能流程,并提供两个示例来说明如何实现这一过程。 步骤一:搭建开发环境 在开始使用Spring整合SpringMVC与My…

    Java 2023年5月17日
    00
  • 如何使用Java ORM框架?

    使用Java ORM框架可以方便地将关系型数据库的数据映射到Java对象中。下面详细讲解如何使用Java ORM框架。 步骤一:选择一个Java ORM框架 Java ORM 框架有很多,如Hibernate、MyBatis、Spring Data JPA等。在选择时需考虑框架的功能、性能和学习难度等因素。 在本次攻略中,我们以Hibernate作为示例。 …

    Java 2023年5月11日
    00
  • Java下载文件的4种方式总结

    以下是Java下载文件的4种方式总结的详细攻略: 一、通过URL类下载文件 Java中可以通过URL类来下载远程文件,具体步骤如下: 创建一个URL对象,指定远程文件的URL地址; URL url = new URL("http://example.com/file/file.txt"); 打开URL连接; URLConnection c…

    Java 2023年5月20日
    00
  • 浅谈java的byte数组的不同写法

    浅谈Java的byte数组的不同写法 Java中的byte数组是一种十分常见的数据结构,但是对于byte数组的不同写法在实际中的使用却存在一定的区别。本篇攻略将从数组的初始化、读取和修改等方面进行详细说明。 一、byte数组的初始化 1. 直接初始化 Java中的数组可以直接通过如下方式进行初始化: byte[] byteArray = {1,2,3,4,5…

    Java 2023年5月26日
    00
  • JSP与JS交互问题 值传递

    JSP与JS交互问题是Web开发中非常关键的一点,在实际开发中经常会遇到需要将JSP页面中的数据传递给JS,或者需要将JS中的数据传递给JSP页面的情况。需要解决值传递的问题。 下面通过两个示例分别说明如何在JSP和JS之间实现值传递。 JSP向JS传递值 首先在JSP页面定义需要传递的数据: <% String username = "张三…

    Java 2023年6月15日
    00
  • idea2020.3测试评价及感受

    IDEA 2020.3测试评价及感受 概述 IntelliJ IDEA 2020.3是一款集成开发环境,旨在提供给Java、Kotlin等开发者使用。本文将深入探讨该版本的测试评价及感受。 安装及配置 在官方网站(https://www.jetbrains.com/idea/)下载.idea2020.3版本软件,然后按照提示进行安装。如若使用社区版则无需激活…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部