当前位置:   article > 正文

将spring-cloud-alibaba升级到2021.1版本_springcloudalibaba2021.1

springcloudalibaba2021.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

  1. <parent>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-alibaba</artifactId>
  4. <version>2021.1</version>
  5. </parent>

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

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

  1. spring:
  2. profiles:
  3. active: dev
  4. application:
  5. name: nacos-provider
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: 127.0.0.1:8848
  10. username: nacos
  11. password: nacos

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

  1. shiro:
  2. enabled: false
  3. annotations:
  4. 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文件修改点如下:

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4. <!--这里使用了 feign 要排除 ribbon 不然报错-->
  5. <exclusions>
  6. <exclusion>
  7. <groupId>com.netflix.ribbon</groupId>
  8. <artifactId>ribbon</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12. <!-- 增加 spring-cloud loadbalancer 依赖 -->
  13. <dependency>
  14. <groupId>org.springframework.cloud</groupId>
  15. <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  16. <version>${spring-cloud-loadbalancer.version}</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.cloud</groupId>
  20. <artifactId>spring-cloud-loadbalancer</artifactId>
  21. <version>${spring-cloud-loadbalancer.version}</version>
  22. </dependency>

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

  1. spring:
  2. profiles:
  3. active: dev
  4. application:
  5. name: nacos-consumer
  6. cloud:
  7. loadbalancer:
  8. nacos: #ribbon
  9. enabled: true
  10. ribbon:
  11. enabled: false #must set else then:No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-netflix-ribbon?
  12. nacos:
  13. discovery:
  14. server-addr: 127.0.0.1:8848
  15. username: nacos
  16. password: nacos
  17. enabled: true
  18. sentinel:
  19. enabled: true
  20. transport:
  21. port: 8719
  22. dashboard: localhost:8858
  23. #NamingService 配置属性
  24. nacos:
  25. 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服务器。估计这是配置文件没统一的缘故。其他相关属性如下:

  1. {accessKey=${nacos.access-key:},
  2. clusterName=${nacos.cluster-name:},
  3. configLongPollTimeout=${nacos.configLongPollTimeout:}, configRetryTime=${nacos.configRetryTime:},
  4. contextPath=${nacos.context-path:}, enableRemoteSyncConfig=${nacos.enableRemoteSyncConfig:},
  5. encode=${nacos.encode:UTF-8},
  6. endpoint=${nacos.endpoint:},
  7. maxRetry=${nacos.maxRetry:},
  8. namespace=${nacos.namespace:},
  9. password=${nacos.password:},
  10. secretKey=${nacos.secret-key:},
  11. serverAddr=${nacos.server-addr:},
  12. 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

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

feign config属性

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/425679
推荐阅读
相关标签
  

闽ICP备14008679号