springCloud项⽬遇到的坑总结
⽬录
SpringCloud项⽬中遇到的问题
注册中⼼eureka配置问题
注册中⼼当然是最先配置的,之后的所有服务都会注册到这个服务中,在这⾥⾯会有很多意想不到的坑:
1.${}和@@的使⽤:
${}:⽤来获取你在配置⽂件中配置的参数,⽐如配置了eureka.instance.hostname=test参数,那么获取test就可以使⽤
${eureka.instance.hostname}来代替.
@@:⽤来获取l⽂件标签中的值,⽐如在pom⽂件中配置了<artifactId>cashier-eureka</artifactId>使⽤@artifactId@便可取到⽂件中的值
bootstrap项目
2.配置⽂件⽅⾯:
配置⽂件有两种:yml和properties,区别也就是在排版上,yml更有层次感,properties则都是通过对象.参数的⽅式排列,个⼈还是建议使⽤ynl配置⽂件(看着爽!);
yml样式:
eureka:
instance:
hostname: test
properties样式:
eureka.instance.hostname=test
这⾥需要注意⽤yml配置时候,属于⼦集的参数前⾯都会有两个空格,然后对应的:符号后也有⼀个空格,这些在idea中如果写错都是会有提⽰,但是层级写错就不⼀定提⽰,需要注意。⽐如:
eureka:
instance:
hostname: ${spring.application.name}
写成
eureka:
instance:
hostname: ${spring.application.name}
”是不会提⽰错误的,不要犯这种最低级的错误。
在配置⽅⾯l 是先于 l 加载,需要优先配置的信息都配置在l中,这⽅⾯详细分析之后会补充。配置⽂件⽅⾯:
cashier:
eureka:
url: @eureka.url@
server:
port: 3000
spring:
security:
user:
name: shoubei
password: cashier
basic:
enabled: false
application:
name: @artifactId@
cloud:
config:
enabled: false
eureka:
instance:
hostname: ${spring.application.name}
prefer-ip-address: true
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: ${cashier.eureka.url}:${server.port}/eureka/
其中需要注意的是register-with-eureka:false:检索服务选项,当设置为True(默认值)时,会进⾏服务检索,注册中⼼不负责检索服务所以设置false,fetch-registry: false:将⾃⼰作为客户端来尝试注册⾃⼰,为true(默认)时⾃动⽣效,不过这两个参数在做注册中⼼集的时候需要打开,不然其他服务是⽆法互相注册的,我这⾥没只有⼀个注册中⼼,都要设置成为false。
其中defaultZone便是eureka注册中⼼的地址,这个地址后⾯必须要跟eureka,不然后续各种不到路径的问题疯狂来袭。
当然defaultZone和service-url我在做的时候还看得有命名不同导致出现的问题,要保证eureka中的这两个参数跟其他服务的参数名相同。
org.springframework.security依赖问题,我相信新⼿肯定会遇到这个问题,eureka服务启动了,其他服务永远是报Cannot execute request on any known server错误,即使路径,什么的都是相同还是不到,⾸先你需要检查这⼏个⽅⾯:
1.上⾯提到的register-with-eureka:false,fetch-registry: false两个参数设置与否;
2.启动类上是否加了@EnableEurekaClient @SpringBootApplication相关注解
3.如果没有⽤到security相关的校验,将pom⽂件中的以下等相关依赖直接删除,然后刷新maven依赖即可
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
4.还有就是⽹上所说的加上⼀个类,然后去掉这个检验,我这⾥没⽤到,去掉依赖就可以了。
不到服务问题
comflix.ansport.TransportException: Cannot execute request on any known server
at comflix.ansport.ute(RetryableEurekaHttpClient.java:112)
at comflix.ansport.ister(EurekaHttpClientDecorator.java:56)
at comflix.ansport.decorator.ute(EurekaHttpClientDecorator.java:59)
at comflix.ansport.ute(SessionedEurekaHttpClient.java:77)
at comflix.ansport.ister(EurekaHttpClientDecorator.java:56)
at comflix.ister(DiscoveryClient.java:829)
at comflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121)
at comflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101)
at urrent.Executors$RunnableAdapter.call(Executors.java:511)
at urrent.FutureTask.run(FutureTask.java:266)
at urrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at urrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at urrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at urrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
1.注册中⼼路径问题:
检查l⽂件下的注册中⼼路径配置
# 注册中⼼配置
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: localhost:3000/eureka/
1.您的主机中的软件中⽌了⼀个已建⽴的连接:调⽤查询数据超时,将查询时间修改长⼀点
#请求处理的超时时间
ribbon.ReadTimeout: 10000
#请求连接的超时时间(默认为2秒)
ribbon.ConnectTimeout: 7000
还有种情况是设置hystrix熔断超时
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 8000
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论