通过Open-Feign调用其他微服务实现解耦

简介: 通过Open-Feign调用其他微服务实现解耦

公众号merlinsea


说明:


   使用feign整合nacos实现微服务间的远程调用,相比于之前的restTemplate的方式,更加的解耦,可以通过单独抽取出其他微服务的FeignClient作为service层的业务逻辑,然后通过注解注入当前微服务的其他方法中(如controller,service等)使用。


什么是Open-Feign


   SpringCloud提供的伪http客户端(本质还是⽤http),封装了Http调⽤流程,更适合⾯向接⼝化编程;让⽤Java接⼝注解的⽅式调⽤Http请求.不⽤像Ribbon中通过封装HTTP请求报⽂的⽅式调⽤; Feign默认集成了Ribbon,即Feign默认有负载均衡策略;nacos默认支持feign远程调用。


1、引入feign依赖

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


2、开启feign远程调用支持@EnableFeignClients

@SpringBootApplication
//开启服务发现(nacos注册中心)
@EnableDiscoveryClient
//开启Feign远程调用支持
@EnableFeignClients
public class OrderApplication {
    public static void main(String [] args){
        SpringApplication.run(OrderApplication.class,args);
    }
}


3、抽取出Service层的接口逻辑(业务核心)【伪http请求!!!!】

   注:当在现在的orderservice中调用这里面的方法时,feign会去nacos注册中心上找id=xdclass-video-service的微服务,然后通过发起http请求访问微服务的方法,而且feign默认集成了ribbon,因此feign本身就有负载均衡策略(基于客户端的负载均衡)

类似于封装了一个远程调用的controller层

/**
 * 调用VideoService中的方法findById的时候会自动拼装为xdclass-video-service/api/v1/video/find_by_id
 */
//调用哪个微服务(如果是集群形式,那么会轮询的方式决定调用哪个服务)
@FeignClient(value = "xdclass-video-service")
public interface VideoService {
    @GetMapping("/api/v1/video/find_by_id")
    Video findById(@RequestParam("videoId") int videoId);
    @PostMapping("/api/v1/video/save")
    int save(@RequestBody Video video);
}


4、controller层通过注入VideoService实现远程调用

@RestController
@RequestMapping("api/v1/video_order")
public class OrderController {
    @Autowired
    private VideoService videoService;
    @RequestMapping("find_by_id")
    public Object findById(int videoId){
        //通过open-feign调用视频微服务的方法
        Video video = videoService.findById(videoId);
        VideoOrder videoOrder = new VideoOrder();
        videoOrder.setVideoId(video.getId());
        videoOrder.setVideoTitle(video.getTitle());
        videoOrder.setCreateTime(new Date());
        videoOrder.setServerInfo(video.getServeInfo());
        return videoOrder;
    }
    @PostMapping("save")
    public int save(@RequestBody Video video){
        //通过open-feign调用视频微服务的方法
        videoService.save(video);
        return 1;
    }
}

640.jpg640.jpg


vip课程是指同学们加入我们的vip学习群,vip群里面的小伙们可以永久参加所有的直播算法刷题课程,我每天直播的时间是早上8:30-9:30,通过腾讯会议在线讲解算法刷题,语言包括c++,java和golang版本,只要加入了vip群,除了每天的直播刷题外,前45位加入的同学,我会额外赠送我所有的学习实战资料,包括docker、git、java io、leetcode算法、java源码分析、jdk新特性、kafka、linux、mybatis、mybatis plus、mysql、mysql刷题、netty、nginx、python、rabbitmq、redis、sharding jdbc、spring、springboot、springcloud、并发编程、html+css、微信支付实战所有内容的学习笔记,总共800+张的文档资料。


国庆前的推广活动:

国庆前的价格:800元/人

国庆后恢复原价为1349元/人

国庆前45位加入的同学,带大家看看我们赠送的学习文档【声明只有国庆前45位加入vip学习群的同学,才会赠送这些内容哈】,对于之前已经加入了其他课程的同学,联系我有额外的优惠,我们每天8:30-9:30上直播算法课程:


链接详情

vip课程是指同学们加入我们的vip学习群,vip群里面的小伙们可以永久参加所有的直播算法刷题课程,我每天直播的时间是早上8:30-9:30,通过腾讯会议在线讲解算法刷题,语言包括c++,java和golang版本,只要加入了vip群,除了每天的直播刷题外,前45位加入的同学,我会额外赠送我所有的学习实战资料。

奔跑的小梁,公众号:梁霖编程工具库算法班永久vip直播教学刷题来啦
相关文章
|
C# 微服务 Windows
模块化革命:揭秘WPF与微服务架构的完美融合——从单一职责原则到事件聚合器模式,构建高度解耦与可扩展的应用程序
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中借鉴微服务架构思想,实现模块化设计。通过将WPF应用分解为独立的功能模块,并利用事件聚合器实现模块间解耦通信,可以有效提升开发效率和系统可维护性。文中还提供了具体示例代码,展示了如何使用事件聚合器进行模块间通信,以及如何利用依赖注入进一步提高模块解耦程度。此方法不仅有助于简化复杂度,还能使应用更加灵活易扩展。
347 0
|
消息中间件 存储 关系型数据库
基于领域事件实现微服务解耦
基于领域事件实现微服务解耦
253 0
基于领域事件实现微服务解耦
|
消息中间件 领域建模 数据安全/隐私保护
微服务架构谈(4):领域事件-解耦微服务的关键
微服务架构谈(4):领域事件-解耦微服务的关键
784 0
微服务架构谈(4):领域事件-解耦微服务的关键
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
647 6
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
303 1
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
11月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
919 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
11月前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
3134 36
微服务架构解析:跨越传统架构的技术革命
|
10月前
|
人工智能 安全 Java
微服务引擎 MSE:打造通用的企业级微服务架构
微服务引擎MSE致力于打造通用的企业级微服务架构,涵盖四大核心内容:微服务技术趋势与挑战、MSE应对方案、拥抱开源及最佳实践。MSE通过流量入口、内部流量管理、服务治理等模块,提供高可用、跨语言支持和性能优化。此外,MSE坚持开放,推动云原生与AI融合,助力企业实现无缝迁移和高效运维。
412 1

热门文章

最新文章