项目场景:

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


使用公共配置

因为发现项目使用的配置文件过多,有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

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

chixxxxx:
nacos:
server-addr: 123.123.000.000:8848
spring:
profiles:
active: test
application:
name: chixxxxx-gateway
group: chixxxxx_GROUP
cloud:
nacos:
discovery:
group: ${spring.application.group}
namespace: ${spring.profiles.active}
server-addr: ${chixxxxx.nacos.server-addr}
config:
group: ${spring.application.group}
namespace: ${spring.profiles.active}
server-addr: ${chixxxxx.nacos.server-addr}
prefix: ${spring.application.name}
shared-configs:
- data-id: common.yml
group: ${spring.application.group}
extension-configs:
- data-id: chixxxxx-gateway-test.yml
group: ${spring.application.group}

配置网关服务

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

location /api/backend/ {
proxy_pass http://localhost:8001;
}

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

- id: platform后台接口
uri: lb://chixxxx-platform
order: 1000
predicates:
- Path=/api/backend/**
filters:
- StripPrefix=0
- name: RequestRateLimiter
args:
key-resolver: '#{@hostAddrKeyResolver}'
redis-rate-limiter:
replenishRate: 20
burstCapacity: 50

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

请求服务转发失败

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

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注册上去,通过千问需要设置

spring:
cloud:
nacos:
discovery:
ip: 123.123.123.123

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


小结

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

nacos配置&gateway配置服务发现一直报500的更多相关文章

  1. .net5+nacos+ocelot 配置中心和服务发现实现

    最近一段时间 因公司业务需要,需要使用.net5做一套微服务的接口,使用nacos 做注册中心和配置中心,ocelot做网关. 因为ocelot 支持的是consol和eureka,如果使用nacos ...

  2. Kubernetes - 配置Nginx-Ingress 作为服务发现

    添加 Kubernetes ConfigMap配置来自定义端口与服务的映射关系 配置文件, 有二个在默认空间下web服务和api服务分别映射到自定义端口 9001, 9002 apiVersion: ...

  3. spring-boot 2.5.4,nacos 作为配置、服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD

    spring-boot 2.5.4,nacos 作为配置.服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD 本文主要介绍 Java 通过 Cloud N ...

  4. 微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io

    原文:微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io 这是关于使用微服务架构创建应用系列的第四篇文章.第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点.第二和第三 ...

  5. Prometheus服务发现之kubernetes_sd_config

    一.为什么要使用Prometheus服务发现 之前我们讲过通过配置prometheus-operator的CRD ServiceMonitor来达到K8S集群相关组件和微服务的监控的目的,可以在Ser ...

  6. Ocelot + Consul + Registrator 基于Docker 实现服务发现、服务自动注册

    目录 1. Consul集群搭建 1.1 F&Q Consul官方推荐的host网络模式运行 2. Registrator服务注册工具 2.1 F&Q Registrator悬挂服务 ...

  7. Nacos配置中心和服务的注册发现

    在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用.Nacos既可以做配置中心,也可以做注册中心.我们先来看看在项目中如何使用Nacos做配置中心. Nac ...

  8. 配置中心Nacos(服务发现)

    服务演变之路 单体应用架构 在刚开始的时候,企业的用户量.数据量规模都⽐较⼩,项⽬所有的功能模块都放在⼀个⼯程中编码.编译.打包并且部署在⼀个Tomcat容器中的架构模式就是单体应用架构,这样的架构既 ...

  9. Consul 服务发现和配置

    Service discovery and configuration made easy. Distributed, highly available, and datacenter-aware. ...

  10. .net core consul 服务配置 服务发现 服务健康检测 服务变更加载

    准备环境 安装consul之后 1. 创建一个.net core webapi 举例为UsercenterService 2. nuget引用Consul组件  https://github.com/ ...

随机推荐

  1. 搭建k8s集群完整版本

    搭建k8s集群完整版 基础设置 设置主机ip nmcli con add ifname ens33 con-name ens33 autoconnect yes type ethernet nmcli ...

  2. python-使用百度AipOcr实现表格文字图片识别

    注:本博客中的代码实现来自百度问答:https://jingyan.baidu.com/article/c1a3101ef9131c9e646deb5c.html 代码运行环境:win10  pyth ...

  3. 操作标签的属性和属性值 table表格

     // 操作标签的属性和属性值         // 特殊的属性           // 可以直接通过 点语法或者[]语法来操作的属性         // id 和 class           ...

  4. INFINI Gateway 与华为鲲鹏完成产品兼容互认证

    何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务(含公有云.私有云.混合云.桌面云)推出的一项合作伙伴计划,旨在为构建持续发展.合作共赢的鲲鹏生态圈,通过整合华为的技术.品牌资源,与合作伙伴共享商 ...

  5. Spring源码——详细流程图(超详细)

    Spring源码流程图

  6. golang reflect 反射机制的使用场景

    Go语言中的 reflect 包提供了运行时反射机制,允许程序在运行时检查和操作任意对象的数据类型和值. 以下是 reflect 包的一些典型使用场景: 1. 动态类型判断与转换:当需要处理多种类型的 ...

  7. 在线SQL格式化工具推荐

    在线SQL格式化工具,一键美化.整理您的SQL代码,支持多种数据库语法格式化.有效提升代码可读性,方便团队协作与快速定位问题,是开发人员必备的SQL编程助手,让复杂查询更清晰,更易于维护. 在线SQL ...

  8. c++引用(REFERENCES)

    一个例子 void add(int value) { value++; } int main() { int a = 5; LOG(a); add(a); LOG( a); } 在这种情况下,变量a在 ...

  9. 天翼云centos7.6安装redis6.2.6

    以下部分的具体略: 1.wget获取源码 2.make 这里重点说下,如何使用 utils/install_server.sh脚本 使用install_service.sh添加服务 有了这个脚本,那么 ...

  10. 07-Linux文件权限管理

    文件的类型 Linux的哲学思想:一切皆文件. Linux的文件分为多种类型. 可以通过ll命令查看文件的类型: ll #输出: -rw-------. 1 root root 1266 2月 29 ...