当前位置:   article > 正文

nacos中gateway配置详解_nacos gateway

nacos gateway

最近忙的不行
本地安装nacos ,它既是注册中心,又是配置中心 默认端口8848(珠穆朗玛峰的高度)
下载安装自行百度,我是在windos中安装的 用的是1.4.1,
下载地址:

https://github.com/alibaba/nacos/releases/tag/1.4.1
image.png

下载后解压
解压的文件中的conf中有个sql文件

image.png

解压之后,要把nacos需要的表sql文件,导入到数据库中,
解压文件中的conf中有个配置文件

image.png


修改为自己的数据库相关信息

image.png

并且要配置好nacos中连接数据库的基本信息,这样nacos才算安装好了。
由于本地是单机启动,所以解压之后,在nacos的bin目录下,调用cmd命令窗,然后执行

startup.cmd -m standalone

安装启动之后,访问 http://localhost:8848/nacos/, 默认的用户名密码,都是:nacos
本地启动服务注册进nacos之后,都会在这个列表中展示

nacos服务列表.png


nacos 的配置在配置列表中,可以单独为每个服务简历配置文件,然后在服务启动,注册进nacos时候,回去读取各自的配置,并且在nacos中的配置,优先级高于每个服务中的yml的配置文件
例如:
vse-console-basic 这个服务,已经注册进nacos,他会自行去读取nacos配置列表中的vse-console-basic.json文件,当读取不到的时候,走自己的配置文件(vse-console-basic 这个项目中的yml配置文件).
新建配置文件的时候,主要dataid 与 服务在nacos中注册的名称相同,那么该服务就会默认读取该配置
如下:

dataid.png

=================================================================================================

gateway 是一个统一路径的路由的作用,比如,我有十个服务,端口为8001---8010,如果不统一的话,那么访问十个服务,需要十个端口,当用了路由之后,可以将端口统一为路由的端口,再由路由转发给各个服务,工作过程大概是,gateway接到请求后,会去注册中心读取已经注册的服务列表,然后根据请求路径,转发给各个服务,这样,访问十个服务,只要访问路由的一个端口就可以了,本文中注册中心是nacos,路由是gateway。

gateway可以同样也是一个服务,启动之后也要注册到nacos中,同其他的服务部分配置一样,都是需要注册到nacos,然后他还有自己独有的配置,如路由转发配置
例如

  1. server:
  2. port: 8110
  3. version: V1.0.0
  4. spring:
  5. application:
  6. name: vse-console-gateway
  7. profiles:
  8. active: dev
  9. cloud:
  10. nacos:
  11. config:
  12. server-addr: 127.0.0.1:8848
  13. username: nacos
  14. password: nacos
  15. prefix: ${spring.application.name}
  16. discovery:
  17. server-addr: 127.0.0.1:8848
  18. username: nacos
  19. password: nacos
  20. gateway:
  21. discovery:
  22. locator:
  23. enabled: true
  24. routes:
  25. - id: vse-console-auth
  26. uri: lb://vse-console-auth
  27. predicates:
  28. - Path=/v1/console/auth/**
  29. - id: vse-console-auth-tenant
  30. uri: lb://vse-console-auth
  31. predicates:
  32. - Path=/v1/console/*/auth/**
  33. - id: vse-console-basic
  34. uri: lb://vse-console-basic
  35. predicates:
  36. - Path=/v1/console/basic/**
  37. - id: vse-console-basic-tenant
  38. uri: lb://vse-console-basic
  39. predicates:
  40. - Path=/v1/console/*/basic/**
  41. - id: vse-console-event
  42. uri: lb://vse-console-event
  43. predicates:
  44. - Path=/v1/console/event/**
  45. - id: vse-console-event-tenant
  46. uri: lb://vse-console-event
  47. predicates:
  48. - Path=/v1/console/*/event/**
  49. - id: vse-console-message
  50. uri: lb://vse-console-message
  51. predicates:
  52. - Path=/v1/console/message/**
  53. - id: vse-console-message-tenant
  54. uri: lb://vse-console-message
  55. predicates:
  56. - Path=/v1/console/*/message/**
  57. - id: vse-console-upms
  58. uri: lb://vse-console-upms
  59. predicates:
  60. - Path=/v1/console/upms/**
  61. - id: vse-console-upms-tenant
  62. uri: lb://vse-console-upms
  63. predicates:
  64. - Path=/v1/console/*/upms/**
  65. - id: vse-console-vedio
  66. uri: lb://vse-console-vedio
  67. predicates:
  68. - Path=/v1/console/vedio/**
  69. - id: vse-console-vedio-tenant
  70. uri: lb://vse-console-vedio
  71. predicates:
  72. - Path=/v1/console/*/vedio/**
  73. main:
  74. allow-bean-definition-overriding: true
  75. #rabbitmq配置
  76. rabbitmq:
  77. addresses: 192.168.86.196
  78. username: mix
  79. password: jovision
  80. port: 5672
  81. virtual-host: /
  82. redis:
  83. # redis 服务器地址
  84. host: 192.168.86.196
  85. # Redis 服务器端连接端口
  86. port: 6379
  87. # redis 服务器连接密码
  88. password: Mix-redis
  89. # 连接超时时间(毫秒)
  90. timeout: 1000
  91. # redis 数据库索引,默认为0
  92. database: 1
  93. feign:
  94. hystrix:
  95. enabled: true
  96. #hystrix的超时时间
  97. hystrix:
  98. command:
  99. default:
  100. coreSize: 100
  101. maxQueueSize: 100
  102. queueSizeRejectionThreshold: 200
  103. execution:
  104. timeout:
  105. enabled: true
  106. isolation:
  107. thread:
  108. timeoutInMilliseconds: 6000
  109. #ribbon的超时时间
  110. ribbon:
  111. ReadTimeout: 6000
  112. ConnectTimeout: 6000
  113. nacos:
  114. data-id: route-console-gateway.json
  115. group-id: DEFAULT_GROUP
  116. timeout: 5000

其中 routes:部分为路由代理的关键配置

  1. - id: vse-console-basic // 配置时候的唯一id,不重复即可
  2. uri: lb://vse-console-basic // 在注册中心注册的服务名称
  3. predicates: // 关键字,断言
  4. - Path=/v1/console/basic/** //匹配规则 访问vse-console-basic 这个服务的所有接口都必须以/v1/console/basic/开头(所有以 /v1/console/basic/ 为开头的服务,都会进入vse-console-basic 这个服务中)
  5. - id: vse-console-basic-tenant
  6. uri: lb://vse-console-basic
  7. predicates:
  8. - Path=/v1/console/*/basic/** //匹配规则 访问vse-console-basic 这个服务的所有接口都必须以/v1/console/*/basic/开头(所有以 /v1/console/*/basic/ 为开头的服务,都会进入vse-console-basic 这个服务中)

其实上面的配置,可以看到 uri 这个关键字,我粘贴出来的,相当于是重复的两个,都是对vse-console-basic 这个服务的匹配规则的限制,为什么写两段呢??
这两段是或者的关系,即 路径 /v1/console/basic/** 或者 /v1/console//basic/* 均可以
如果写成

  1. - id: vse-console-basic
  2. uri: lb://vse-console-basic
  3. predicates:
  4. - Path=/v1/console/basic/**
  5. - Path=/v1/console/*/basic/**

这个是并且的关系.........经过实践发现这个坑,弄了好久~~

这是其一
只是相当于在gateway中的固定的配置,其实,gateway还可以动态路由的配置,其实这不是新东西,为什么这么说呢?
它的动态路由,其实就是读取nacos中的配置文件,这样在nacos中随时修改,那么gateway都可以立即获取感知到,如果改了刚刚routes中的配置,也就是相当于动态路由了.

如何实现呢?

  1. nacos:
  2. data-id: route-console-gateway.json
  3. group-id: DEFAULT_GROUP
  4. timeout: 5000

就是这段代码,它会去nacos读取配置列表中data-id为 route-console-gateway的配置,如果读取到了,那么其实也就是实现了动态路由。读取不到,还是走刚刚的我粘贴中的yml配置文件

StripPrefix与PrefixPath 

StripPrefix 过滤器

  • 作用: 去掉部分URL路径
  1. spring:
  2. cloud:
  3. gateway:
  4. routes:
  5. - id: vse-console-basic
  6. uri: lb://vse-console-basic
  7. predicates:
  8. - Path=/v1/**
  9. filters:
  10. - StripPrefix=1

 如上,我们访问网关地址http://host:port/vse-console-basic/v1/hello

  • 若无StripPrefix过滤器时,gateway 发送请求到后台服务vse-console-basic的url就是http://vse-console-basic/v1/hello
  • 若有StripPrefix过滤器时,gateway会根据StripPrefix=1所配的值(这里是1)去掉URL路径中的部分前缀(这里去掉一个前缀,即去掉v1)
  • 发送请求到后台服务spring-cloud-producer的url变成http://vse-console-basic/hello

    

PrefixPath 过滤器

  • 作用: 它的作用和StripPrefix正相反,是在URL路径前面添加一部分的前缀

    

  1. spring:
  2. cloud:
  3. gateway:
  4. routes:
  5. - id: vse-console-basic
  6. uri: lb://vse-console-basic
  7. filters:
  8. - PrefixPath=/v1
  • 这将会把/v1添加到路由prefixpath_route匹配到的所有请求的路径的前面。
    • 所以对/hello的请求将会被发送到/v1/hello

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/57412
推荐阅读
相关标签
  

闽ICP备14008679号