feign.FeignException$NotFound: status 404 reading ClassName#function()

  • 调用工程(消费者)的接口未配置被调用工程(生产者)的工程名

feign.FeignException$NotFound: status 404 reading ClassName#function()_第1张图片

如上图,@ FeignClient(value = "spc-consul-provider",path="demo")应该再加一个配置path,这个path是被调用工程的工程调用名,在被调用工程(微服务生产者)配置的这个server.servlet.context-path=/demo。

  • 被调用工程(生产者)的consul配置要正确,不要搞错了
############################ 配置consul begin ##############################
#consul服务器ip
spring.cloud.consul.host=127.0.0.1
#consul服务器端口,默认8500
spring.cloud.consul.port=8500
#是否将服务注册到consul,即成为(微)服务生产者
spring.cloud.consul.discovery.register=true
#注册到consul上的(微)服务名称,可以理解为类名
spring.cloud.consul.discovery.service_name=spc-consul-provider
#当前注册这个(微)服务服务的实例id,可以理解为类对象,一个类可以有多个实例
#默认情况下为 spring.application.name+server.port,如果在多个服务器同一个服务,因为应用名和端口都一致,会导致serviceId会重复,所以一般情况都需要引入一个随机数避免重复${ramdom.long}. 
#spring.cloud.consul.discovery.instance-id=${spring.application.name}-${server.port}-${spring.cloud.client.ip-address}
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${server.port}-01
#当前注册到consul(微)服务的主机名,默认是本机主机名
spring.cloud.consul.discovery.hostname=localhost
#当前注册到consul(微)服务的工程端口,默认是本工程启动端口,一般不用配置
#spring.cloud.consul.discovery.port=8888
#使用 consul服务器 IP,而不是 hostname,需要搭配 prefer-ip-address属性
spring.cloud.consul.discovery.ip-address=127.0.0.1
#在注册时使用 consul IP,而不是 hostname
spring.cloud.consul.discovery.prefer-ip-address=false
#配置 Consul注册服务的 Tags,设置为urlprefix-/serviceName的格式,是自动注册到 Fabio 集群中。下面示例的 tag map 是:  foo->bar 和 baz->baz
#spring.cloud.consul.discovery.tags:foo=bar,baz
#设定 consul acl token值
#spring.cloud.consul.discovery.acl-token=4efb1523-76a3-f476-e6d8-452220593089
#健康检查的频率, 默认 10 秒
spring.cloud.consul.discovery.health-check-interval=15s
#actuator 健康检查的 url 路径
#默认为/actuator/health
spring.cloud.consul.discovery.health-check-path=${management.endpoints.web.base-path}/health
#自定义健康检查的 url(适合于不适用 actuator 的场景)
#spring.cloud.consul.discovery.health-check-url=/check
############################ 配置consul end ##############################

 尤其是这两个端口的配置不要搞错了

#consul服务器ip
spring.cloud.consul.host=127.0.0.1
#consul服务器端口,默认8500
spring.cloud.consul.port=8500
#############################
#当前注册到consul(微)服务的工程端口,默认是本工程启动端口,一般不用配置
#spring.cloud.consul.discovery.port=8080

在consul可视化页面中可以看到红框内容要和注册服务的工程ip:port一致(而这个ip:port就是上面提醒要注意的配置,尤其是端口不要搞成最下面的那个),不一致的话调用的时候就会出现404。

feign.FeignException$NotFound: status 404 reading ClassName#function()_第2张图片

参考博文(尤其是第一篇和第二篇,springcloud的demo按顺序都可以照着学习):

  • https://www.cnblogs.com/bluersw/p/11610699.html 
  • https://www.cnblogs.com/bluersw/p/11610703.html
  • https://www.cnblogs.com/scode2/p/8671223.html

你可能感兴趣的:(java,springcloud,consul)