经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
nacos配置&gateway配置服务发现一直报500
来源:cnblogs  作者:蜗牛使劲冲  时间:2024/7/31 15:16:22  对本文有异议

项目场景:

这两天不是一直在搞简化配置、使用公共配置、我的服务可以通过网关访问这几个任务嘛,也是不断地踩坑补知识才总算把这几个任务都搞好了,下面就是记录过程中遇到的问题。


使用公共配置

因为发现项目使用的配置文件过多,有application、application-test.yml、bootstrap.yml、远程nacos配置,我想不能搞得简单些就尽量把所有配置都放到线上,本地只是做区分么,然后自己恶补了下application和bootstrap区别

application和bootstrap区别和优先级

顺序:bootstrap.properties > bootstrap.yml > application.properties > application.yml
优先级:properties>yml
文件位置优先级:
src里的config文件夹>>根目录>>resource里的config文件夹>>resource下的
小结:
同样的yml,bootstrap比application优先级高,是由父上下文加载的,而application是由子加载
bootstrap一般配置的是引导配置,连接的是spring cloud配置中心,默认本地不能覆盖远程配置,远程配置一些加密的信息


使用公共配置common.yml

直接上配置代码,注意参数里面

  1. chixxxxx:
  2. nacos:
  3. server-addr: 123.123.000.000:8848
  4. spring:
  5. profiles:
  6. active: test
  7. application:
  8. name: chixxxxx-gateway
  9. group: chixxxxx_GROUP
  10. cloud:
  11. nacos:
  12. discovery:
  13. group: ${spring.application.group}
  14. namespace: ${spring.profiles.active}
  15. server-addr: ${chixxxxx.nacos.server-addr}
  16. config:
  17. group: ${spring.application.group}
  18. namespace: ${spring.profiles.active}
  19. server-addr: ${chixxxxx.nacos.server-addr}
  20. prefix: ${spring.application.name}
  21. shared-configs:
  22. - data-id: common.yml
  23. group: ${spring.application.group}
  24. extension-configs:
  25. - data-id: chixxxxx-gateway-test.yml
  26. group: ${spring.application.group}

配置网关服务

我之前上家公司是配过网关的,其实就是指定服务+断言路径就行了,但是这边还是有点区别,首先是nginx.conf那边,先做了个匹配路径转发到网关的一个操作,如下

  1. location /api/backend/ {
  2. proxy_pass http://localhost:8001;
  3. }

提前转发到网关,然后网关配置

  1. - id: platform后台接口
  2. uri: lb://chixxxx-platform
  3. order: 1000
  4. predicates:
  5. - Path=/api/backend/**
  6. filters:
  7. - StripPrefix=0
  8. - name: RequestRateLimiter
  9. args:
  10. key-resolver: '#{@hostAddrKeyResolver}'
  11. redis-rate-limiter:
  12. replenishRate: 20
  13. burstCapacity: 50

这里面尤其要注意的是StripPrefix这个参数,之前没有太注意,还弄出个404,看了些讲解才知道这个就是去掉我一开始请求的路径上的字符,如:StripPrefix=1,那么请求到服务就是backend/user/detail?id=1;StripPrefix=2,user/detail?id=1,这个数字代表去掉几个/分割的字符串。

请求服务转发失败

这个又是什么呢,我照样子请求url,但是返回报500,然后我查看了下日志

  1. ERROR 1399157 [reactor-http-epoll-4] org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler [bfc53f9d-5959] 500 Server Error for HTTP GET "/api/backend/appVersion/detail?id=12"

就是服务器错误,我再看目标服务器上的日志,没有新增日志,然后就因为报错信息有限,我前前后后花了靠一天时间最后通过“同义千问”找到灵感-好好对一下服务状态是否正常,打开:服务列表-服务详情,看到健康状态是ture啊,那为啥报500,再看ip地址,这个ip写的是:172.17.0.5这个好像docker或者内网地址啊,一开始怀疑内网,但是想想不会啊,我的服务器在外头的,然后再去目标服务器执行:docker inspect xxx,看到就是这个,哦~原来把docker分配的ip注册到nacos上了,我应该是要把服务器ip注册上去,通过千问需要设置

  1. spring:
  2. cloud:
  3. nacos:
  4. discovery:
  5. ip: 123.123.123.123

然后重新发下,再去详情看下,ip变了,最后再通过postman请求下就可以通过网关地址访问到了


小结

最近这个礼拜做的这几个任务都是我自发去做的,因为看到了配置比较乱现在用户数比较少可以折腾,避免后期人多了再折腾损耗比较大,同时对gateway这块知识查漏补缺也有了相应的提高。

原文链接:https://www.cnblogs.com/warrenwt/p/18334715

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号