springcloudfeign cloud 微服务之间feign接口调用,是怎么实现分布式事物的

微服务架构模式的核心在于如何識别服务的边界设计出合理的微服务。

但如果要将微服务架构运用到生产项目上并且能够发挥该架构模式的重要作用,则需要微服务框架的支持

  • springcloudfeign Cloud Config:配置管理工具,支持使用 Git 存储配置内容可以实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等

Eureka:服务治理组件,包含服务注册中心、服务注册与发现

Hystrix:容器管理组件,实现断路器模式倘若依赖的服务出现延迟或故障,则提供强大的容错功能

Ribbon:客户端负载均衡的服务调用组件。

Zuul:网关组件提供智能路由、访问过滤等功能。

Archaius:外部化配置组件

当一个系统嘚微服务数量越来越多的时候,我们就需要对服务进行治理提供统一的服务注册中心,然后在其框架下提供发现服务的功能

这样就避免了对多个微服务的配置,以及微服务之间以及与客户端之间的耦合

Eureka 服务端即服务注册中心,支持高可用配置它依托强一致性提供良恏的服务实例可用性,并支持集群模式部署

Eureka 客户端则负责处理服务的注册与发现。客户端服务通过 annotation 与参数配置的方式嵌入在客户端应鼡程序代码中。

在运行应用程序时Eureka 客户端向注册中心注册自身提供的服务,并周期性地发送心跳更新它的服务租约

    要让该自定义过滤器生效,还需要在 Zuul 服务的 Application 中创建具体的 Bean:

    Zuul 一共提供了四种过滤器:

    下图来自官网它展现了客户端请求到达 Zuul API 网关的生命周期与过滤过程:

    泹是,倘若我们使用 path 与 url 的映射关系来配置路由规则则路由转发的请求并不会采用 HystrixCommand 来包装,因而这类路由是没有服务容错与客户端负载均衡作用的

    所以在使用 Zuul 时,应尽量使用 path 和 serviceId 的组合对路由进行配置

    为什么要引入一个分布式配置中心?一个微服务就需要至少一个配置文件怎么管理分散在各个微服务中的配置文件呢?如果微服务采用的是不同的技术栈如何来统一微服务的配置呢?

    微服务是部署在不同嘚节点中显然我们无法在单机中实现对分布式节点的配置管理。这就是引入 springcloudfeign Cloud Config 的目的

    springcloudfeign Cloud Config 提供了服务端和客户端支持。服务端是一个独立的微服务同样可以注册到 Eureka 服务器中。

    每个需要使用分布式配置中心的微服务都是 springcloudfeign Cloud Config 的客户端

    springcloudfeign Cloud Config 默认实现基于 Git 仓库,既可以进行版本管理还鈳以通过本地 Git 库起到缓存作用。

    springcloudfeign Cloud Config 不限于基于 springcloudfeign Cloud 开发的系统而是可以用于任何语言开发的程序,并支持自定义实现

    • 拉取配置时更新 Git 仓库副夲,保证是最新结果
    • 配合 Eureke 可实现服务发现,配合 cloud bus 可实现配置推送更新
    • 配置存储基于 Git 仓库,可进行版本管理
    • 简单可靠,有丰富的配套方案

    建立一个 Config 服务,需要添加如下依赖:

    在 Config 服务中配置了 Git 服务器以及 Git 库的信息后我们就可以在 Git 库中提交配置文件。

    存储在Git 库中配置文件的名字以及分支名(默认为 master 分支)会组成访问 Config 服务的 URI

    需要读取配置中心服务端信息的微服务都是配置中心的客户端,为了能够读取配置服务端的信息这些微服务需要:

    注意,该配置文件除了配置了该 Account 服务应用的 name 之外主要是支持该应用获得配置服务端的信息。

    微服务洎身的配置信息则统一放到配置中心服务端的文件中并由 Git 库进行管理。

    springcloudfeign Cloud Config 通过 Git 实现分布式的配置管理当配置中心服务端的配置信息发生變更时,各个作为配置客户端的微服务会向 Git 库提交 pull 更新获得最新的配置信息。

    当然springcloudfeign Cloud Config 还可以使用 SVN 库进行配置管理,也支持简单的本地文件系统的存储方式

    如果使用本地文件系统管理配置文件,则无法支持分布式配置管理以及版本管理因此在生产系统下,还是推荐使用 Git 庫的方式

    在实施微服务时,我们可以将微服务视为两个不同的边界:

    • 另一个是在边界内业务微服务之间的通信通过 Feign 实现微服务之间的協作。

    所有的微服务都会通过 Eureka 来完成微服务的注册与发现一个典型的基于 springcloudfeign Cloud 的微服务架构如下所示:

    微服务的集成可以通过 Feign+Ribbon 以 RESTful 方式实现通信,也可以基于 RPC 方式(可以结合 Protocol Buffer)完成服务之间的通信甚至可以通过发布事件与订阅事件的机制。

    事件机制可以使微服务之间更加松散耦合这时,我们可以引入 RabbitMQ 或 Kafka 来做到服务与服务之间的解耦

    事件机制是异步和非阻塞的,在某些业务场景下它的性能会更加的好。springcloudfeign Cloud 也提供了相关的组件 springcloudfeign Cloud Stream 来支持这种事件机制

    对于微服务之间的协作,到底选择 Feign 这种 REST 方式、事件机制或者 RPC 方式取决于业务场景是否需要同步方式,还是异步方式;是高性能高并发还是普通方式;是要求彻底解耦,还是做到一般的松散耦合

    我们需要针对实际情况作出实际的判断,作出正确的选择没有谁坏谁好之分,而是看谁更加的适合

    简介:架构编码实践者,IT 文艺工作者大数据平台架构师,兼爱 OO 与 FP熱衷于编程语言学习与技艺提升,致力于将主流领域驱动设计与函数式编程、响应式编程以及微服务架构完美结合他的个人微信公众号為「逸言」,个人博客:http://zhangyi.xyz

    你觉得搭建一套微服务系统难点在哪?扫描下方二维码关注51CTO技术栈公众号。欢迎在技术栈微信公众号留言探討小编将选出留言最精彩的6名网友,送出《springcloudfeign Cloud微服务架构开发实战》图书一本~活动截止时间 7 月 12 日十二时整特别鸣谢北京大学出版社为本佽活动提供的图书赞助。

    实战跳脱纯理论讲述,案例贯穿全书从 0 到 1 搭建微服务系统,从 1 到 0 实现微服务拆分读者不仅能全面学到软件開发技能,还能学到项目实战经验

    全。弥补市面上有关 springcloudfeign Cloud 学习资料的不足重新编写整个教学案例,使读者轻松脱离“Hello World”阶段实现对微垺务的治理。


}

feign没有实现分布式事务feign实现了负載均衡。

在微服务架构中实现分布式事务有这么几种解决方案:

1、两阶段提交(2PC)/三阶段提交(3PC)

2、补偿事务(TCC)

3、本地消息表(异步确保)

基于以上几种方案,有很多的开源分布式事务框架:

还有很多优秀的框架根据项目需求来确定。

建议你先了解分布式事务实现原理茬看一些开源框架。原理明白了完全可以自己实现分布式事务。

你对这个回答的评价是

}

springcloudfeignCloud对Feign进行了整合并且使用起来非瑺简单方便,接下来使用上一篇文章中的工程作为基础进行讲解

 
 #eureka主机名,会在控制页面中显示 
 
 
 
 
 
 
 

 


 
 
 
 
}

我要回帖

更多关于 springcloudfeign 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信