赞
踩
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 #传输协议
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。