Java微服务间接口调用 feign

 更新时间:2023年03月30日 14:14:01   作者:zlfjavahome  
这篇文章主要介绍了微服务间的接口调用feign,Feign是一种声明式、模板化的HTTP客户端。在spring cloud中使用Feign,可以做到类似于普通的接口的请求调用,感兴趣的小伙伴可以参考阅读

Feign说明

Feign是一种声明式、模板化的HTTP客户端。在spring cloud中使用Feign,可以做到类似于普通的接口的请求调用,可以发现对应的服务的接口,进而直接调用对应服务中的接口。

引入依赖,启动类开启客户端

首先需要在各个微服务中引入依赖

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

然后在启动类中加入注解@EnableFeignClients ,开启Feign客户端。

在各自的启动类中添加注释:

@EnableDiscoveryClient 和 @EnableFeignClients ,并在配置文件中添加各自的服务名,以及配置Nacos的服务地址

//服务A的启动类
 
@EnableDiscoveryClient  //nacos注册
@EnableFeignClients     //Feign 服务调用
@SpringBootApplication
public class ApplicationA {
    public static void main(String[] args){
        SpringApplication.run(ApplicationA.class,args);
    }
}
 
//服务B的启动类
 
@EnableDiscoveryClient  //nacos注册
@EnableFeignClients     //Feign 服务调用
@SpringBootApplication
public class ApplicationB {
    public static void main(String[] args){
        SpringApplication.run(ApplicationB.class,args);
    }
}

application.properties

服务A配置
# 服务端口
server.port=8001
# 服务名
spring.application.name=serviceA
 
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
 
--------------------------服务B配置-------------------------------
# 服务端口
server.port=8003
# 服务名
spring.application.name=serviceB
 
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

3.在微服务A中创建client包和接口

然后在当前服务内编写Feign接口,接口与普通的controller层类似,只是在类上不需要写@Controller等注解,只需要加上@Component 、 @FeignClient注解即可,下面的请求方法需要写上请求方式(根据提供服务的接口适配)@PostMapping(“/findList”)注解。如下:

@Component
@FeignClient(value = "sso", path = "/api/user", fallback = UserClientHystrix.class)//value是需要调用的服务名称,path是sso服务内的请求路径
//value必选是服务名(就是yaml中server.name)
//path是前缀(就是yaml中server.contentPath)
//fallback是服务熔断的类
public interface UserClient {
 
    /**
     * 获取对象集合
     * @param object
     * @return
     */
    @PostMapping("/findList")//根据服务适配添加注解
    Result<UserDO> findList(@CustomJSONBody Object object);
}
//@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。

在微服务A中创建client包和接口

@Component
@FeignClient("serviceB")  
public interface ServiceBClient {   
    @PostMapping("serviceB/test")
    public Result test(@RequestParam String args);
}

注意微服务A(调用者)中ServiceBClient接口中编写的是微服务B中被调用的接口,参数类型方法名要一致。以下时微服务B中被调用的接口(Controller)

服务B中接口的示例
 
@RestController
@RequestMapping("serviceB")
@CrossOrigin
public class VodController {
    
    @PostMapping("test")
    public void test(@RequestParam String args){
        System.out.println(args);
    }
}

4.在微服务A中调用服务B的接口

方法总结

在微服务A中调用服务B中的接口

1.初始化操作:添加依赖,配置等等。。。

2.创建Client接口,使用@GetMapping注解对被调用的微服务进行地址映射。

3.在微服务A中调用Client接口中的方法。

注:① 接口层添加注解@FeignClient,并在注解中指明属性value="服务提供方的实例名";

② 在方法上添加映射的URL要与服务提供方接口的URL一致;

到此这篇关于Java微服务间接口调用 feign的文章就介绍到这了,更多相关接口调用 feign内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mybatis读取和存储json类型数据的实现

    Mybatis读取和存储json类型数据的实现

    本文主要介绍了Mybatis读取和存储json类型数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java中AIO、BIO、NIO应用场景及区别

    Java中AIO、BIO、NIO应用场景及区别

    本文主要介绍了Java中AIO、BIO、NIO应用场景及区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 深度解析Java中volatile的内存语义实现以及运用场景

    深度解析Java中volatile的内存语义实现以及运用场景

    这篇文章主要介绍了Java中volatile的内存语义实现以及运用场景,通过JVM的机制来分析volatile关键字在线程编程中的作用,需要的朋友可以参考下
    2015-12-12
  • spring boot中各个版本的redis配置问题详析

    spring boot中各个版本的redis配置问题详析

    这篇文章主要给大家介绍了关于spring boot中各个版本的redis配置问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Java实例化类详解

    Java实例化类详解

    学习JAVA这门面向对象的语言,实质就是不断地创建类,并把类实例化为对象并调用方法。对于初学JAVA的人总搞清楚对象是如何实例化的,假如类之间存在继承关系,那就更糊涂了。下面我们通过两个例题来说明对象的实例化过程。
    2016-03-03
  • 浅谈synchronized方法对非synchronized方法的影响

    浅谈synchronized方法对非synchronized方法的影响

    下面小编就为大家带来一篇浅谈synchronized方法对非synchronized方法的影响。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • IntelliJ IDEA 报错:找不到包或者找不到符号的问题及解决方案

    IntelliJ IDEA 报错:找不到包或者找不到符号的问题及解决方案

    这篇文章主要介绍了IntelliJ IDEA 报错:找不到包或者找不到符号的问题及解决方案,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java代码实现四种限流算法详细介绍

    Java代码实现四种限流算法详细介绍

    本文主要介绍了Java代码实现四种限流算法详细介绍,包含固定窗口限流,滑动窗口限流,漏桶限流,令牌桶限流,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • mybatis 使用concat 模糊查询方式

    mybatis 使用concat 模糊查询方式

    这篇文章主要介绍了mybatis 使用concat 模糊查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • kafka的消息存储机制和原理分析

    kafka的消息存储机制和原理分析

    这篇文章主要介绍了kafka的消息存储机制和原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论