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