zoukankan      html  css  js  c++  java
  • springcloud alibaba

    springcloud alibaba主要功能

    • 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
    • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
    • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
    • 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
    • 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
    • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
    • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
    • 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道

    springboot 2.2.6,jdk1.8

    1》Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台

    1服务注册与发现:

    1、导包,pom.xml


    <
    dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>

    2、配置文件,application.yml或application.properties ,将当前微服务注册到nacos中

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848

     spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    3、使用 @EnableDiscoveryClient 注解开启服务注册与发现功能,启动类中添加,例如

    @EnableDiscoveryClient
    @SpringBootApplication
    public class YoungmallOrderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(YoungmallOrderApplication.class, args);
        }
    
    }

    4、启动 Nacos Server

    先去下载:https://github.com/alibaba/nacos/releases,这里下载1.2.1版本

    运行

    打开管理页面:http://192.168.42.1:8848/nacos/index.html#/login

    账号和密码都是:nacos

    可以看到服务管理:

    5、启动微服务,刷新nacos管理页面,服务发现列表里就有一个服务

    给服务起名字:

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
      application:
        name: youngmall-order  #注册到nacos中的服务名

    demo:

    两个服务:会员和优惠券,会员远程调用优惠券服务,获取会员拥有优惠的信息

     进行上述配置后,pom.xml加入feign进行接口调用

    导包:pom.xml

             <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>

     youngmall-coupon:被调用的方法

    @RestController
    @RequestMapping("coupon/coupon")
    public class CouponController {
        @Autowired
        private CouponService couponService;
    
        @RequestMapping("/member/list")
        public R findMemberCoupon(){
            CouponEntity couponEntity = new CouponEntity();
            couponEntity.setCouponType(1);
            couponEntity.setNote("超级优惠");
            return R.ok().put("coupon",couponEntity);
        }

    youngmall-member:远程调用接口和调用接口的方法

    远程接口:

    //指定哪个服务
    @FeignClient("youngmall-coupon")
    public interface CouponFeignServrice {
    //远程服务的完整接口
    @RequestMapping("coupon/coupon/member/list")
    R findMemberCoupon();
    }

    youngmall-member:

    @RestController
    @RequestMapping("member/member")
    public class MemberController {
        @Autowired
        private MemberService memberService;
        @Autowired
        private CouponFeignServrice couponFeignServrice;
      //调用远程接口,返回数据
        @RequestMapping("/coupon")
        public R  getCoupon(){
           R r =  couponFeignServrice.findMemberCoupon();
           return  r;
        }

    测试:

     流程:

    youngmall-memeber调用远程接口的方法findMemberCoupon(),

    远程接口上的注解@FeignClient("youngmall-coupon")找到在nacos中对应的服务,

    方法上指定的完整路径区调用服务中对应的方法,最后完成调用。

    2配置中心:

    以前读取文件配置参数是从properties读取,如数据库的一些参数配置,这样读取的一个劣势就是当项目已经部署后

    每次修改这里面的参数之后,就要重新将项目打包后发布,当项目很多又有集群部署的时候就会很麻烦,

    使用nacos config可以在管理页面进行修改并发布,这样操作就会简单。

    1、导包:pom.xml

    
    
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
    

    2、创建配置文件,官方建议是创建bootstrap.properties,这个文件会在application.yml之前读取

    基础配置参数

    spring.application.name=youngmall-member
    spring.cloud.nacos.config.server-addr= 192.168.42.1:8848

    3、测试:

    //每次修改参数后会自动刷新
    @RefreshScope

    @RestController
    @RequestMapping("member/member")
    public class MemberController {
    @Autowired
    private MemberService memberService;
    @Autowired
    private CouponFeignServrice couponFeignServrice;

    @Value("${youngmall-member.user.name}")
    String userName;

    @Value("${youngmall-member.user.age}")
    int age;

    @RequestMapping("/getPara")
    public R getPara(){

    return R.ok("从配置中心获取的参数:userName:"+userName+",age:"+age);
    }

    4、登录nacos server管理页面:

    在配置管理中添加配置:点击加号

     

     访问:

     更多配置:

    1.命名空间:

    1.1做项目的环境隔离:dev,test,prod等环境   

     dev命名空间下,创建各个微服务的参数

     

     bootstrap.properties配置文件:

    spring.application.name=youngmall-member
    spring.cloud.nacos.config.server-addr=192.168.42.1:8848
    #命名空间id
    #spring.cloud.nacos.config.namespace=5523a150-87ea-4c41-826d-c2c50d1ca805

     测试:dev命名空间下的youngmall-member的配置文件:

    member.user.name=dev-youngmall-member-zhangsan
    member.user.age=22

    访问:

     1.2、不同的微服务之间的环境隔离和配置文件的读取

     2、配置分组:我们还可以通过分组来进行一个微服务环境的隔离,例如:

     bootstrap.properties配置文件:

    spring.application.name=youngmall-member
    spring.cloud.nacos.config.server-addr=192.168.42.1:8848
    #命名空间id
    spring.cloud.nacos.config.namespace=47704579-b637-4c2e-86f0-779678859d87
    #配置分组
    spring.cloud.nacos.config.group=prod
    测试:youngmall-member命名空间下的dev分组的youngmall-member配置文件:
    member.user.name=youngmall-member-prod-zhangsan
    member.user.age=23

    访问:

     还可以根据分组做不同的事情,如不同的节假日,商品做不同的活动:

    !在data id 为bootstrap.properties中的spring.application.name的值时或者值.properties都可以进行读取配置

    spring.application.name=youngmall-gateway
    spring.cloud.nacos.config.server-addr=192.168.42.1:8848
    spring.cloud.nacos.config.namespace=c241a49c-b096-4207-9e6a-9548ff2500a7

    比如:

     配置文件分别为:

    server.port=13000和server.port=12000
    测试一下最后读取的配置是:youngmall-gateway.properties

     当删掉youngmall-gateway.properties配置文件时,他就会读取youngmall-gateway配置。

    3、配置集:

    有时候我们需要读取不同的配置文件,如db.properties,application,logback.xml等等,这个时候就需要配置集了。

    示例:读取application.yml文件,项目里的不再写东西了

     在nacos管理平台:在命名空间下为youngmall-gateway下新增配置

     application.yml配置类型

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
      application:
        name: youngmall-gateway
    server:
      port: 18000

    bootstrap.properties

    spring.application.name=youngmall-gateway
    spring.cloud.nacos.config.server-addr=192.168.42.1:8848
    spring.cloud.nacos.config.namespace=c241a49c-b096-4207-9e6a-9548ff2500a7
    
    spring.cloud.nacos.config.extension-configs[0].dataId=application.yml
    spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
    spring.cloud.nacos.config.extension-configs[0].refresh=true

    启动:

     2》Gateway:网关,流量的入口,用来路由转发,权限校验,限流等功能,用来取代第一代网关zuul

    三个专业术语:

    • Route: Route the basic building block of the gateway. It is defined by an ID, a destination URI, a collection of predicates and a collection of filters. A route is matched if aggregate predicate is true.
    • Predicate: This is a Java 8 Function Predicate. The input type is a Spring Framework ServerWebExchange. This allows developers to match on anything from the HTTP request, such as headers or parameters.
    • Filter: These are instances Spring Framework GatewayFilter constructed in with a specific factory. Here, requests and responses can be modified before or after sending the downstream request.

    要访问路由时,先要进行检查过滤操作,就像servlet的过滤器拦截器差不多,满足条件后,才让你访问路由。

     简单使用:

    1、pom.xm导包,nacos的包也导入。

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-gateway</artifactId>
            </dependency>

    2、application.yml配置:这次采用配置集配置

    bootstrap.properties配置还是一样:

    spring.application.name=youngmall-gateway
    spring.cloud.nacos.config.server-addr=192.168.42.1:8848
    spring.cloud.nacos.config.namespace=c241a49c-b096-4207-9e6a-9548ff2500a7
    
    spring.cloud.nacos.config.extension-configs[0].dataId=application.yml
    spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
    spring.cloud.nacos.config.extension-configs[0].refresh=true

    就在application.yml添加关于gateway路由的操作:这是其中的一个策略

    spring:
      cloud:
        gateway:
          routes:
          - id: query_route
            uri: https://www.qq.com
            predicates:
            - Query=url,qq
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
      application:
        name: youngmall-gateway
    server:
      port: 18000

    它的意思就是在请求地址是url=qq时,跳转到 https://www.qq.com网页

    predicates:
            - Query=url,qq
    predicates接受一个数组,可以有很多条件,同时还可以进行正则匹配
    例如:输入url=q时,就可以跳转到https://www.qq.com网页
    predicates:
            - Query=url,q.

    这种规则还有很多,官网提供了不同的规则来满足不同的需求:

     再试一个规则:After Route Predicate Factory

     The After Route Predicate Factory takes one parameter, a datetime (which is a java ZonedDateTime). This predicate matches requests that happen after the current datetime.

     在时间到了之后才可以进行访问:这个感觉可以做抢购秒杀这样的需求。

    application.yml,加上一个规则:

    spring:
      cloud:
        gateway:
          routes:
          - id: query_route
            uri: https://www.qq.com
            predicates:
            - Query=url,qq
            - After=2020-05-24T10:42:00.866+08:00[Asia/Shanghai]
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
      application:
        name: youngmall-gateway
    server:
      port: 18000

    在未到时间时,报404错误

     到达时间后,可以访问

     

     待更。。。

    参考文档:https://github.com/alibaba/spring-cloud-alibaba

  • 相关阅读:
    JS中的事件&对象
    WSL使用小结:从ArchLinux到Manjaro
    WSL学习:安装ArchLinux和Root/Cling以及注意事项
    Qt5网络请求使用及WebRequest函数
    有道词典中的OCR功能:第三方库的变化
    C++学习(二):学会使用stringstream
    C语言集锦(三)Direct3D和GDI+的例子
    网络那些事:浏览器、网络协议以及常见软件
    C++学习(一):现代C++尝试
    PostScript学习:另一种缩写为PS的技术
  • 原文地址:https://www.cnblogs.com/tdyang/p/12902524.html
Copyright © 2011-2022 走看看