zoukankan      html  css  js  c++  java
  • 【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、熔断降级功能

  • 相关阅读:
    C#中关于@的用法
    c++ 中__declspec 的用法
    #pragma详细解释(一)
    memmove 和 memcpy的区别
    【niubi-job——一个分布式的任务调度框架】----安装教程
    [异能程序员]第一章 酒后事发(第一更)
    博客园的最后一篇博文,还是要离开了(附带个人博客源码分享)
    五一假期——技术之路上的坎儿
    deerlet-redis-client添加集群支持,邀请各路大神和菜鸟加入。
    从日常开发说起,浅谈HTTP协议是做什么的。
  • 原文地址:https://www.cnblogs.com/iUtopia/p/11577916.html
Copyright © 2011-2022 走看看