• 【Spring Cloud】实战项目搭建


    0、项目搭建

    创建maven项目,删除其中的src目录,作为整体父项目,在其中添加module实现各个组件。

    1、Eureka Server的实现

    添加module,创建Spring Boot项目,添加Eureka Discovery ClientEureka Server依赖,作为Eureka Server。

    启动类添加@EnableEurekaServer注释。

    修改配置文件application.yml,如下:

     1 server:
     2     port: 1001
     3 
     4 eureka:
     5     client:
     6         //是否将自己注册到eureka server上,默认为true
     7         //由于本节点为eureka server,设为false
     8         registerWithEureka: false
     9         //是否从eureka server获取注册信息,默认为true
    10         //由于为单点的eureka server,不需要同步信息,设为false
    11         fetchRegistry: false
    12         //设置与eureka server交互的地址,查询和注册服务都经过这个地址
    13         serviceUrl:
    14             defaultZone: http://localhost:${server.port}/eureka/

    启动项目,即可访问http://localhost:1001/查看eurekaServer管理中心。

    2、Service节点

    添加module,创建Spring Boot项目,添加Eureka Discovery ClientEureka Server依赖。

    启动类添加@EnableEurekaClient注释(也可用@EnableDiscoveryClient取代,效果相同,前者对应Eureka,后者适用多种注册中心)以及@ComponentScan注释。

    修改配置文件application.yml,如下:

     1 spring:
     2     //服务名称
     3     application:
     4         name: Service112 
    13 server:
    14     port: 8001
    15 
    16 //在服务中心进行注册
    17 eureka:
    18     client:
    19         serviceUrl:
    20             defaultZone: http://localhost:8801/eureka/

    配置完成后启动项目,可在eureka管理中心看到注册的服务。

    项目中新建service和controller包,controller包中HelloController负责接受请求,并路由到service包中的具体实现,controller中仅注入service对象,然后根据请求路径调用响应的service实现,service中负责具体的实现。

    同理,按上面步骤增加第二个Service节点,注册名为Service2,注册在8002端口。

    3、服务调用

    Sping  Cloud由两种消费方式,rest+ribbon和feign两种。

    3.1、rest+ribbon调用(通过RestTemplate构造URL调用)

    添加module,创建Spring Boot项目,添加Eureka Discovery ClientEureka ServerRibbon依赖。

    启动类添加@EnableDiscoveryClient和@ComponentScan注释。

    修改配置文件application.yml,注册在8003端口上的Service3服务。

    service包和controller包同上。

    Service3调用Service1和Service2:

    启动类中注入RestTemplate对象,添加@LoadBalance、@Bean和@Autowired注释,开启负载均衡。

    改造service包中的具体实现:

    自动注入(@Autowired)RestTemplate对象,restTemplate.getForObject("http://${注册应用名}/${请求路径}?参数列表",String.class)

    实现远程调用,通过注册应用名自动负载均衡。

    3.2、feign调用(通过动态代理的接口来实现接口调用,在接口中实现远程调用)

    添加module,创建Spring Boot项目,添加Eureka Discovery ClientEureka ServerFeign依赖。

    启动类添加@EnableDiscoveryClient和@ComponentScan注释。

    修改配置文件application.yml,注册在8004端口上的Service4服务。

    service包和controller包同上。

    Service4调用Service1和Service2:

    新增feignRPC包,其中定义两个接口,分别对应两个应用Service1和Service2的调用。

    service1_feign接口为:

    1 @FeignClients(value = "Service1")    //通过应用注册名来调用服务
    2 public interface service1_feign() {
    3     @RequestMapping(value = "/${请求路径}", method = RequestMethod.GET)
    4     public String getHello(@RequestParam("service1中参数名") 具体参数);
    5 }

    改造service包中的具体实现:

    自动注入(@Autowired)service1_feign接口,像调用本地方法那样调用接口的方法即可实现远程调用

    Feign集成了Ribbon,通过注册应用名自动负载均衡。

    4、体验负载均衡机制

     创建module,普通的service节点,注册在8005端口,应用名为Service1。

    在eureka server管理界面可以看到Service1有两个服务提供者提供同名应用。

    通过Service3或者Service4调用应用名为Service1的服务。

    由于Ribbon默认的负载均衡策略为轮询,通过刷新界面,可以看到一次调用module1和module5提供的服务。

    5、网关Zuul的搭建

    5.1、体验网关的请求转发功能

    创建module,添加Eureka Discovery Client、Eureka Server和Zuul依赖。

    启动类添加@EnableZuulProxy注释。

    修改配置文件application.yml,注册在6001端口上,注册应用名为zuul。

    启动项目后,可以通过网关访问服务:

    直接http://localhost:8001/hello?name=world可以访问Service1;

    通过网关转发,http://localhost:6001/Service1/hello?name=world访问Service1应用,Zuul默认实现了按应用名负载均衡。

    5.2、网关的自定义路由

    在application.yml配置文件中配置:

    1 zuul:
    2     //前缀,请求路径前必须加
    3     prefix: /api
    4     //自定义路由
    5     routes:
    6         Service1: /service_1_zuul/**
    7     //禁止直接访问后台服务
    8     ignored-services: Service1

    启动项目后,访问http://localhost:8001/hello?name=world失败,网关禁止直接调用后台服务Service1。

    通过网关访问http://localhost:6001/api/service_1_zuul/hello?name=world,可以轮询调用Service1和Service5。

    6、Eureka Server集群

    7、熔断降级功能

  • 相关阅读:
    代码重构~方法归子
    代码重构~代码注释
    VS2010安装帮助文档
    imagecreate()与imagecreatetruecolor()区别
    php cookie 和session详解
    horner's rule霍纳法则及综合除法
    php单引号和双引号的区别与用法
    php通过session判断用户是否登录
    php 产生验证码
    基于递归的整数幂的计算
  • 原文地址:https://www.cnblogs.com/iUtopia/p/11577916.html
Copyright © 2020-2023  润新知