前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(一)Spring Cloud:概念、核心组件以及OpenFegin服务间调用

(一)Spring Cloud:概念、核心组件以及OpenFegin服务间调用

作者头像
关忆北.
发布2021-12-07 16:14:07
2870
发布2021-12-07 16:14:07
举报
文章被收录于专栏:关忆北.关忆北.

核心特性

  1. 服务注册与发现
  2. 负载均衡
  3. 服务间的调用
  4. 容错、服务降级、断路器
  5. 消息总线
  6. 分布式配置中心
  7. 链路器

核心组件

  1. Netflix:服务发现/负载均衡
  2. Config:分布式配置中心,利用Git/SVN集中管理项目的配置文件
  3. Bus:消息总线,构建消息驱动的微服务,也可以用来做一些状态管理
  4. Consul:服务注册发现
  5. Stream:基于Redis、RabbitMQ、Kafka实现的消息微服务
  6. OpenFeign:提供OpenFeign集成到SpringBoot应用中的方式,主要解决微服务间调用的问题。
  7. Gateway:官方网关服务
  8. Contract:一个消费者驱动的、面向Java的契约框架
  9. Data Flow:在一个结构化的平台上,组成数据微服务

注册中心

Eureka

类似于Dubbo中的Nacos、Zookeeper

单体应用的例子:所有的业务都集中在一个项目中,当用户从浏览器发起请求时,直接由前端发起请求给后端,后端调用业务逻辑,给前端请求做出响应,完成一次调用,整个调用过程是一条直线,不需要服务间的中转,没有必要引入注册中心。

在这里插入图片描述
在这里插入图片描述

图片原作者:江南一点雨 http://www.javaboy.org/

随系统量增大,可以将项目中拆分为不同的模块,当用户发起请求时,需要各个模块间进行调用。

在这里插入图片描述
在这里插入图片描述

图片原作者:江南一点雨 http://www.javaboy.org/

如此发现服务间的调用异常复杂,且具有强耦合性,为保证调用正常,服务间的IP必须写死,同时需要集群化部署。

Eureka基于REST来实现服务的注册与发现,SpringCloud中封装了Eureka。

Eureka有两部分:

  • 服务端:注册中心,用来接收其他服务的注册(IP、接口)
  • 客户端:Java客户端,用来注册,实现负载均衡

Eureka中三个角色:

在这里插入图片描述
在这里插入图片描述
eureka集群搭建

修改windows电脑hosts文件

代码语言:javascript
复制
新增一行:
127.0.0.1 eurekaA eurekaB
//目的是解析url

集群搭建,只需要修改配置文件即可

a.properties

代码语言:javascript
复制
#当前服务名字和端口
spring.application.name=eureka
server.port=1111
#给服务取别名注册到注册中心
eureka.instance.hostname=eurekaA
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
#A服务要注册到B服务上(注册地址)
eureka.client.service-url.defaultZone=http://eurekaB:1112/eureka

b.properties

代码语言:javascript
复制
#当前服务名字和端口
spring.application.name=eureka
server.port=1112
#给服务取别名注册到注册中心
eureka.instance.hostname=eurekaB
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true

#B服务要注册到A服务上
eureka.client.service-url.defaultZone=http://eurekaA:1111/eureka
微服务模块启动
代码语言:javascript
复制
#指定配置文件启动,将不同的A,B服务相互注册
java -jar xxx.jar --spring.profiles.active=a
java -jar xxx.jar --spring.profiles.active=b
在这里插入图片描述
在这里插入图片描述
微服务间调用

微服务间的调用使用注解@FeignClient来配置,使用在对外暴露的接口上。fallback是容错的处理类,当远程调用接口失败/超时时,走对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口。

代码语言:javascript
复制
服务A调用服务B
A是一个接口,在接口中使用@FeignClient定义要调用的目标服务B
@FeignClient(name = "B", fallback = A.class)
public interface A {
    //do somethings
    
    AFackBack implentments A{
        //远程调用失败的调用方法,一般是抛出业务异常
    }
}

点我进入demo源码地址

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心特性
  • 核心组件
  • 注册中心
    • Eureka
      • eureka集群搭建
        • 微服务模块启动
          • 微服务间调用
          相关产品与服务
          负载均衡
          负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档