Castle的SpringCloud学习:Eureka+Feign/Ribbon+Hystrix

springcloud示例,从零开始搭建SpringCloud的微服务应用实践,springboot版本为2.2.2.RELEASE。
按照顺序搭建,从上往下依赖


新建一个Maven项目springcloud_first

注册中心(Eureka)

  1. 使用Spring Initializr创建注册中心Moduleeureka-server
    勾选Spring Cloud Discovery -> Eureka Server
    Spring Initializr选择依赖
  2. pom中可以去掉spring-boot-starter-webspring-boot-starter-tomcat(暂时未发现任何区别,不清楚为什么默认会添加)。
    去掉*spring-boot-starter-web*和*spring-boot-starter-tomcat*依赖
  3. resources下创建配置文件application.yml(没有使用默认的application.properties,个人觉得 .yml的可读性高些)
    配置文件**application.yml**
  4. 在启动类EurekaServerApplication添加注解 @EnableEurekaServer表明自己是服务注册中心
    启动类**EurekaServerApplication**添加注解 *@EnableEurekaServer*
  5. 启动服务后,浏览器访问http://localhost:8761/成功
    访问

提供者(Eureka)

前2步和注册中心一致,不做累述

  1. 使用Spring Initializr创建注册中心Moduleeureka-server
    勾选Spring Cloud Discovery -> Eureka Server
  2. pom中可以去掉spring-boot-starter-webspring-boot-starter-tomcat
  3. resources下创建配置文件application.yml
    在**resources**下创建配置文件**application.yml**
  4. 在启动类EurekaClientApplication添加注 @EnableEurekaServer表明自己是服务提供者;添加注解 @RestController,用于获取返回值。
    在启动类**EurekaClientApplication**添加注 *@EnableEurekaServer*表明自己是服务提供者;添加注解 *@RestController*,用于获取返回值。
  5. 启动服务后,浏览器访问http://localhost:8762/welcome?name=Castle成功访问
  6. 并且在注册中心发现服务
    注册中心发现服务

    修改端口后分别运行(cmd中 使用 java -jar XXX.jar),即可在注册中心找到多个提供者(仅端口不同)

消费者(Feign)

  1. 使用Spring Initializr创建服务消费者Module,勾选Spring Cloud Discovery -> Eureka Server,Spring Cloud Routing -> OpenFeign

  2. resources下创建配置文件application.yml
    配置文件*application.yml*

  3. 在启动类添加注解 @EnableFeignClients表明自己是服务消费者。

  4. 添加接口类 WelcomeRemote
    接口类 *WelcomeRemote*

  5. 添加调用控制类 WelcomeController
    调用控制类 *WelcomeController*

    注意idea会提示注解bean失败(听说运行没问题),2种解决方法:
    1.修改idea设置:
    1) ctrl+alt+s(打开setting快捷键)
    2) Inspections
    3) 在右侧搜索框中找spring core
    4) 将Autowiring for Bean class设置为Waring
    2.接口类添加注解@Repository

  6. 启动服务后,浏览器访问http://localhost:8765/welcome?name=Castle成功
    访问
    并且注册中心找到新建的消费者注册中心找到新建的消费者

    此时,在有多个提供者的情况下,会采用默认的轮询来负载均衡

消费者(ribbon)

  1. 使用Spring Initializr创建服务消费者Module,勾选Spring Cloud Discovery -> Eureka Server,Spring Cloud Routing -> Ribbon
  2. resources下创建配置文件application.yml,参考[消费者(Feign)],修改端口(8766)以共存。
  3. 在启动类装载 RestTemplate Bean对象创建配置文件*application.yml*
  4. 添加接口实现等类
    • 添加服务接口类 WelcomeService
      接口类 *WelcomeService*

    • 添加服务接口实现类 WelcomeServiceImpl接口实现类 *WelcomeServiceImpl*

      注意uri拼接上有提供者的名称“eureka-client”

    • 添加服务调用控制类 WelcomeController调用控制类 *WelcomeController*

  5. 启动服务后,浏览器访问http://localhost:8766/welcome?name=Castle成功,并且注册中心找到新建的消费者。访问

    因为端口号没有冲突,和feign共存
    此时,在有多个提供者的情况下,会采用默认的轮询来负载均衡

断路器(Hystrix)

  1. ribbon-consumer中添加hystrix依赖
    <!--hystrix断路器-->
    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    
  2. 接口实现类WelcomeServiceImpl中加入相关注解和断路器调用方法
    实现类**WelcomeServiceImpl**中加入相关注解和断路器调用方法
  3. 在启动类RibbonConsumerApplication添加注解 @EnableHystrix
    启动类**RibbonConsumerApplication**添加注解 **@EnableHystrix**
  4. 关闭一个提供者,多次访问 http://localhost:8766/welcome?name=Castle,观测断路器生效。
    关闭一个提供者观测断路器生效
    对比一下直接访问原提供者
    对比一下直接访问原提供者

网关(Zuul)

  1. 使用Spring Initializr创建注册中心Modulezuul-gateway
    勾选Spring Cloud Routing -> Zuul

  2. resources下创建配置文件application.yml
    配置文件**application.yml**

    此处使用了serviceId,所以必须依赖Eureka,否则可以选择url方式,原因:

    通过url映射的方式对于Zuul并不是特别友好,Zuul需要知道所有服务的地址才能完成所有的映射配置。而实际上,服务名与服务实例地址的关系在eureka server中已经存在了,所以只需要将Zuul注册到eureka server上去发现其他服务,我们就可以完成对serviceId的映射。

    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
  3. 在启动类 ZuulGatewayApplication添加注 @EnableZuulProxy表明自己是网关。

  4. 新建过滤器 TokenFilter
    过滤器 **TokenFilter**

  5. 启动服务后,浏览器访问http://localhost:8767/welcome?name=Castle&token=Caslte成功;再访问缺失token的地址http://localhost:8767/welcome?name=Castle&token=失败(这一定是故意的)。在这里插入图片描述
    当然,在注册中心也发现刚定义好的网关服务。


PS.Markdown格式控制有点问题,查看有问题可以访问本文原址。

本文源码

本文原址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值