springCloud项目遇到的坑总结

SpringCloud项目中遇到的问题

注册中心eureka配置问题

注册中心当然是最先配置的,之后的所有服务都会注册到这个服务中,在这里面会有很多意想不到的坑:
1.${}和@@的使用
${}:用来获取你在配置文件中配置的参数,比如配置了eureka.instance.hostname=test参数,那么获取test就可以使用 ${eureka.instance.hostname}来代替.

@@:用来获取pom.xml文件标签中的值,比如在pom文件中配置了<artifactId>cashier-eureka</artifactId>使用@artifactId@便可取到文件中的值
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}

”是不会提示错误的,不要犯这种最低级的错误。

在配置方面bootstrap.yml 是先于 application.yml 加载,需要优先配置的信息都配置在bootstrap.yml中,这方面详细分析之后会补充
配置文件方面:

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: http://${cashier.eureka.url}:${server.port}/eureka/

其中需要注意的是register-with-eureka:false:检索服务选项,当设置为True(默认值)时,会进行服务检索,注册中心不负责检索服务所以设置false,fetch-registry: false:将自己作为客户端来尝试注册自己,为true(默认)时自动生效,不过这两个参数在做注册中心集群的时候需要打开,不然其他服务是无法互相注册的,我这里没只有一个注册中心,都要设置成为false。

其中defaultZone便是eureka注册中心的地址,这个地址后面必须要跟eureka,不然后续各种找不到路径的问题疯狂来袭。

当然defaultZoneservice-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.还有就是网上所说的加上一个类,然后去掉这个检验,我这里没用到,去掉依赖就可以了。

找不到服务问题

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
	at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)
	at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)
	at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829)
	at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121)
	at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

1.注册中心路径问题
检查bootstrap.yml文件下的注册中心路径配置

# 注册中心配置
eureka:
  instance:
    prefer-ip-address: true
  client:
    service-url:
      defaultZone: http://localhost:3000/eureka/

1.您的主机中的软件中止了一个已建立的连接:调用查询数据超时,将查询时间修改长一点

#请求处理的超时时间
ribbon.ReadTimeout: 10000
#请求连接的超时时间(默认为2秒)
ribbon.ConnectTimeout: 7000

还有种情况是设置hystrix熔断超时

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 8000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C·L

多少给点吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值