将spring-cloud-alibaba升级到2021.1版本

springcloud-alibaba 应用demo,基于https://github.com/rstyro/SpringCloud-Alibaba-learning的例子,将spring-cloud-alibaba升级到2021.1版本,并调试成功。

采用docker 的nacos镜像运行nacos服务, 重点调试了springcloud-nacos-discovery-provider、springcloud-nacos-discovery-consumer、springcloud-shiro和springcloud-nacos-sentinel项目。

一、升级spring-cloud-alibaba升级到2021.1版本

修改pom.xml

   <parent>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba</artifactId>
        <version>2021.1</version>
    </parent>

二、调试springcloud-nacos-discovery-provider项目

首先要先注册服务,向nacos注册服务的名称就是spring.application.name的配置的名称,pom.xml文件注释掉不需要的spring-cloud-starter-zipkin依赖,修改application.xml,重点是nacos的server-addr地址。

spring:
  profiles:
    active: dev
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        username: nacos
        password: nacos

调试时,项目依赖springcloud-shiro的权限控制,可以在application.xml中设置不启用shiro。

shiro:
  enabled: false
  annotations:
    enabled: false

代码中注释掉权限的注解     @RequiresPermissions("user:list")

测试链接是http://localhost:8810/test/sayHi?name=test,测试成功

如果启用shiro,上述配置false 改为true,测试链接是 http://localhost:8810/test/sayHi?authority=rstyro&name=test。注意authority参数,可选值是rstyro、admin。

三、调试springcloud-nacos-discovery-consumer项目

采用springcloud loadbalancer的负载均衡,因此需禁用ribbon。pom.xml文件修改点如下:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <!--这里使用了 feign 要排除 ribbon 不然报错-->
            <exclusions>
                <exclusion>
                    <groupId>com.netflix.ribbon</groupId>
                    <artifactId>ribbon</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 增加 spring-cloud loadbalancer 依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
            <version>${spring-cloud-loadbalancer.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
            <version>${spring-cloud-loadbalancer.version}</version>
        </dependency>

application.yml文件配置如下,重点是配置nacos地址和loadbalancer的配置。

spring:
  profiles:
    active: dev
  application:
    name: nacos-consumer
  cloud:
    loadbalancer:
      nacos:          #ribbon
        enabled: true
      ribbon:
        enabled: false    #must set  else then:No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-netflix-ribbon?
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        username: nacos
        password: nacos
        enabled: true
    sentinel:
      enabled: true
      transport:
        port: 8719
        dashboard: localhost:8858

#NamingService 配置属性
nacos:
  server-addr: 127.0.0.1:8848

注意,1)一定要配置 loadbalancer.ribbon.enabled: false 和pom中exclusion  ribbon,否则总是报错,找不到ribbon。

2)使用feign的web服务调用的FeignController,总是报错refuse connect。通过打印日志发现调用的provider发布的服务的地址不正确,即consumer项目没有从nacos正确获得provider的服务的服务ip。具体原因是nacos的服务发现的功能不正常,返回为空。最后重要找到nacos.server-addr的配置属性,NamingService需要此配置链接nacos服务器。估计这是配置文件没统一的缘故。其他相关属性如下:

{accessKey=${nacos.access-key:}, 
clusterName=${nacos.cluster-name:}, 
configLongPollTimeout=${nacos.configLongPollTimeout:}, configRetryTime=${nacos.configRetryTime:}, 
contextPath=${nacos.context-path:}, enableRemoteSyncConfig=${nacos.enableRemoteSyncConfig:}, 
encode=${nacos.encode:UTF-8}, 
endpoint=${nacos.endpoint:}, 
maxRetry=${nacos.maxRetry:}, 
namespace=${nacos.namespace:}, 
password=${nacos.password:}, 
secretKey=${nacos.secret-key:}, 
serverAddr=${nacos.server-addr:}, 
username=${nacos.username:}}

 3、报错 No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer? 

FeignController执行不成功。原因是spring-cloud-loadbalancer版本太高,应该是3.0.1.

<spring-cloud-loadbalancer.version>3.0.1</spring-cloud-loadbalancer.version>

四、典型配置参数说明

application.yml

#application.yml配置文件

spring:
  profiles:
    # 对应环境
    active: dev
  application:
    # 服务名
    name: pearl-test
  cloud:
    nacos:
      config:
        # 是否开启配置中心 默认true
        enabled: true
        # 配置中心地址
        server-addr: localhost:8848
        # 当要上阿里云时,阿里云上面的一个云账号名
        access-key: accessKey
        # 当要上阿里云时,阿里云上面的一个云账号密码
        secret-key: secretKey
        # Nacos Server 对外暴露的 context path
        context-path: nacos
        # 读取的配置内容对应的编码 默认UTF-8
        encode: ISO-8859-1
        # 配置文件后缀
        file-extension: yml
        # 配置对应的分组
        group: PEARL_GROUP
        # 命名空间 常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等
        namespace: 771d3d1a-374b-47fe-b88b-c53a0b271acf
        # 文件名前缀 默认为 ${spring.appliction.name}
        prefix: prefix
        # 客户端获取配置的超时时间(毫秒) 默认3000
        timeout: 5000
        # 配置成Nacos集群名称
        #cluster-name: clusterName
        # Nacos 认证用户
        username: nacos
        # Nacos 认证密码
        password: 123456
        # 长轮询的重试次数 默认3
        max-retry: 5
        # 长轮询任务重试时间,单位为毫秒
        config-retry-time: 1000
        # 长轮询的超时时间,单位为毫秒
        config-long-poll-timeout: 1000
        # 监听器首次添加时拉取远端配置 默认false
        enable-remote-sync-config: true
        # 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
        #endpoint: localhost
        # 是否开启监听和自动刷新
        refresh-enabled: true
        # 支持多个共享 Data Id 的配置,优先级小于extension-configs,自定义 Data Id 配置 属性是个集合,内部由 Config POJO 组成。Config 有 3 个属性,分别是 dataId, group 以及 refresh
        shared-configs[0]:
          data-id: pearl-common.yml
          group: DEV_GROUP   # 默认为DEFAULT_GROUP
          refresh: true   # 是否动态刷新,默认为false
        shared-configs[1]:
          data-id: pearl-test.yml
          group: DEV_GROUP
          refresh: true
        # 支持多个扩展 Data Id 的配置 ,优先级小于prefix+dev.yaml
        # extension-configs:

feign config属性

feign:
  client:
    config:
      defalut: # feign请求默认配置
        connectTimeout: 2000
        readTimeout: 3000
      fiegnName: # fiegnName服务请求的配置,优先defalut配置。
        connectTimeout: 5000 # 链接超时时间
        readTimeout: 5000  # 请求
        loggerLevel: full   # 日志级别
        errorDecoder: com.example.SimpleErrorDecoder #异常处理
        retryer: com.example.SimpleRetryer # 重试策略
        defaultQueryParameters: # 默认参数条件
          query: queryValue
        defaultRequestHeaders:  # 默认默认header
          header: headerValue
        requestInterceptors:    # 默认拦截器
          - com.example.FooRequestInterceptor
          - com.example.BarRequestInterceptor
        decode404: false   #404响应 true-直接返回,false-抛出异常       
        encoder: com.example.SimpleEncoder  #传输编码
        decoder: com.example.SimpleDecoder  #传输解码
        contract: com.example.SimpleContract #传输协议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值