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

yizhihongxing

下面是“从零开始学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中,异常处理机制分为两种:检查性异常和非检查性异常。检查性异常需要在代码中进行处理,如IOExcept…

    Java 2023年5月30日
    00
  • Java8 Stream流的合并

    最近的需求里有这样一个场景,要校验一个集合中每个对象的多个Id的有效性。比如一个Customer对象,有3个Id:id1,id2,id3,要把这些Id全部取出来,然后去数据库里查询它是否存在。 @Data @AllArgsConstructor public class Customer { private String name; private Stri…

    Java 2023年5月6日
    00
  • Java安全之Tomcat6 Filter内存马问题

    我们来讲一下Java安全之Tomcat6 Filter内存马问题的完整攻略。 什么是Tomcat6 Filter内存马问题 Tomcat6是一个流行的Web服务器,它使用过滤器(Filter)来处理HTTP请求。但是,Tomcat6过滤器存在一个安全漏洞,即攻击者可以创建恶意过滤器,将恶意代码注入内存并产生后门。这就是所谓的Tomcat6 Filter内存马…

    Java 2023年5月19日
    00
  • springboot集成schedule实现定时任务

    下面是springboot集成schedule实现定时任务的完整攻略: 1. 学习前提 在学习本篇攻略之前,需要掌握以下基础知识: Java基础语法 Spring框架基础知识 SpringBoot框架基础知识 2. Schedule简介 Schedule是Spring框架提供的一种任务调度框架,用于在指定的时间间隔内执行指定的任务。Schedule有以下几种…

    Java 2023年5月15日
    00
  • 详解Java向服务端发送文件的方法

    详解Java向服务端发送文件的方法 在Java编程中,我们经常需要向服务端发送文件,比如我们需要上传用户的头像、简历等等。本文将详细讲解Java向服务端发送文件的方法。 1. 使用Java中的URLConnection发送文件 Java中的URLConnection类可以用来向服务端发送文件。下面是示例代码: import java.io.File; imp…

    Java 2023年5月19日
    00
  • 零基础学Java:Java开发工具 Eclipse 安装过程创建第一个Java项目及Eclipse的一些基础使用技巧

    下面详细讲解“零基础学Java:Java开发工具 Eclipse 安装过程创建第一个Java项目及Eclipse的一些基础使用技巧”的完整攻略。 一、Eclipse的安装 首先,进入Eclipse官网https://www.eclipse.org/downloads/packages/installer,选择下载适合自己电脑操作系统的Eclipse版本。 下…

    Java 2023年5月24日
    00
  • 基于java Servlet编码/异常处理(详解)

    基于Java Servlet编码/异常处理(详解) 什么是Servlet? Servlet是Java语言编写的、在服务器端运行的小程序。它们是动态Web页面的重要组成部分。Servlet在Java中的定位和CGI在C++中的定位相似,只不过Servlet是基于Java的安全性和跨平台性等特点开发出的一种CGI形式。 Servlet程序可以生成一个动态网页,也…

    Java 2023年5月31日
    00
  • eclipse中jsp码提示不显示该怎么解决?

    解决eclipse中JSP代码提示不显示的问题,可以按照以下步骤进行: 步骤一:安装“JSP Editor”插件 首先需要确保已经安装了“JST Server Adapter”或类似的服务器适配器,接着在Eclipse Marketplace中搜索并安装“JSP Editor”插件。 步骤如下: 打开Eclipse,单击“Help”菜单; 在下拉菜单中选择“…

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