Spring Cloud ============= gateway ---------------------- .. code-block:: xml org.springframework.cloud spring-cloud-starter-bootstrap org.springframework.cloud spring-cloud-starter-gateway com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config org.springframework.cloud spring-cloud-starter-loadbalancer 通过Spring Cloud原生注解@EnableDiscoveryClient开启服务注册发现功能。 .. code-block:: java @EnableDiscoveryClient @SpringBootApplication public class MySpringCloudGatewayApplication { public static void main(String[] args) { SpringApplication.run(MySpringCloudGatewayApplication.class, args); } } 声明route: .. code-block:: yaml spring: cloud: gateway: routes: - id: my-admin uri: lb://my-admin predicates: - Path=/admin/** .. tip:: route配置,可以写到nacos中,修改也能生效。 以上是最基本的代码,配置好,至少程序可以正常跑。 如果从gateway请求,通过wireshark抓包,可以看到到具体的微服务后,会自动添加一些Forwarded的请求头信息。 .. code-block:: text GET /admin/hello?name=chenjie2 HTTP/1.1\r\n User-Agent: curl/8.4.0\r\n Accept: */*\r\n X-Request-red: blue\r\n <-------- 通过AddRequestHeader过滤器添加 Forwarded: proto=http;host="127.0.0.1:17000";for="127.0.0.1:6201"\r\n <-------- gateway自动添加 X-Forwarded-For: 127.0.0.1\r\n <-------- gateway自动添加 X-Forwarded-Proto: http\r\n <-------- gateway自动添加 X-Forwarded-Port: 17000\r\n <-------- gateway自动添加 X-Forwarded-Host: 127.0.0.1:17000\r\n <-------- gateway自动添加 host: 172.21.176.1:17001\r\n content-length: 0\r\n \r\n [Response in frame: 1038] [Full request URI: http://172.21.176.1:17001/admin/hello?name=aa] nacos -------------------------------- .. code-block:: xml com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config .. code-block:: yaml spring: cloud: nacos: discovery: server-addr: 192.168.88.251:8848 username: nacos password: nacos secret-key: SecretKey012345678901234567890123456789012345678901234567890123456789 namespace: 3d6e5c2a-0100-4f0e-b434-5d1db1fee2ef ip: 192.168.91.7 # 如果主机上有多个IP,设置该属性,注册的服务使用指定的IP。 config: server-addr: 192.168.88.251:8848 namespace: 3d6e5c2a-0100-4f0e-b434-5d1db1fee2ef group: DEFAULT_GROUP file-extension: yaml username: nacos password: nacos secret-key: SecretKey012345678901234567890123456789012345678901234567890123456789 如果提示user not found,说明nacos开启了认证,必须在discovery和config下配置用户名、密码、安全密钥信息。 sentinel -------------------------------- 参考链接: - `在生产环境中使用Sentinel `_ 建议采用push模式。 单节点部署 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 去Release页面 `下载最新版本 `_ .. code-block:: bash nohup java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=10.196.126.43:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.8.jar > sentinel-dashboard.log 2>&1 & 默认用户名和密码都是 sentinel 微服务使用sentinel .. code-block:: yaml spring: sentinel: transport: port: 8719 dashboard: 10.196.126.43:8080 client-ip: 192.168.91.7 # 告诉sentinel dashboard,要使用该IP通信。否则,如果主机上有多个IP,则可能注册的IP是错误的,导致通信错误。 代码中声明: .. code-block:: java @SentinelResource(value = "sayHello") public String sayHello(String name) { return String.format("hello %s", name); } 现在可以到sentinel中配置流控规则,比如针对QPS,单机阈值5,直接,快速失败。 流量控制 ^^^^^^^^^^^^^^^^ - `流量控制 `_ 流控日志:${user_home}/logs/csp/sentinel-block.log `流控日志 `_ .. code-block:: bash curl http://localhost:8719/clusterNode curl http://localhost:8719/cnode?id=sayHello curl http://localhost:8719/tree 网关 ^^^^^^^^^^^^^^^^ - `网关流控DEMO `_ .. code-block:: xml com.alibaba.csp sentinel-spring-cloud-gateway-adapter ${project.version} com.alibaba.csp sentinel-transport-simple-http