<!-- TOC -->
[1. 协议转换(http->sofa)](#1-协议转换http-sofa)
[2. 鉴权](#2-鉴权)
[3. 熔断限流](#3-熔断限流)
[4. 安全校验](#4-安全校验)
[5. 日志](#5-日志)
[6. 其他](#6-其他)
<!-- /TOC -->
# 1. 协议转换(http->sofa)
## 1.1. 在本地发布sofa 服务端.配置如下
```
ServerConfig serverConfig = new ServerConfig()
.setProtocol("bolt") // 设置一个协议,默认bolt
.setPort(12200) // 设置一个端口,默认12200
.setDaemon(false); // 非守护线程
ProviderConfig<HelloService> providerConfig = new ProviderConfig<HelloService>()
.setInterfaceId(HelloService.class.getName()) // 指定接口
.setRef(new HelloServiceImpl()) // 指定实现
.setServer(serverConfig); // 指定服务端
providerConfig.export(); // 发布服务
System.out.println("----provider service success----");
```
## 1.2. 在该工程下,配置拦截path
```
spring:
cloud:
# Gateway routes config
gateway:
routes:
- id: syaHello
# 拦截后重定向的服务器位置
uri: http://127.0.0.1:8080
# 拦截的路径
predicates:
- Path=/sayHello
filters:
# 第一个参数是开启过滤器,第二个是rpc对应的接口,
# 第三个对应的是接口方法,第四个是可选的,指定 入参参数名:入参参数类型
- SofaAdapt=true,com.example.sofarpc.noboot.HelloService,sayHello,{"data":"java.lang.String"}
- id: getDepts
uri: http://127.0.0.1:8080
predicates:
- Path=/getDepts
filters:
- SofaAdapt=true,com.example.sofarpc.noboot.HelloService,getDepts
```
## 1.3. 泛化调用配置
```
ConsumerConfig<GenericService> consumerConfig = new ConsumerConfig<GenericService>()
.setInterfaceId(interfaceClass)
.setProtocol("bolt") // 指定协议
.setDirectUrl("bolt://127.0.0.1:12200") // 指定直连地址
.setGeneric(true); // 设置泛化调用
GenericService genericService = consumerConfig.refer();
```
## 1.4. 启动工程,发起POST请求
```
http://127.0.0.1:8085/getDepts
入参:
{
"params": [
{
}
]
}
返回:
[{"type":"com.example.sofarpc.noboot.vo.Dept","fields":{"code":"code1","id":"1","name":"name2"}},
{"type":"com.example.sofarpc.noboot.vo.Dept","fields":{"code":"code2","id":"2","name":"name2"}},
{"type":"com.example.sofarpc.noboot.vo.Dept","fields":{"code":"code3","id":"3","name":"name3"}}]
http://127.0.0.1:8085/sayHello
入参:
{
"params": [
{
"data" : " I am OK"
}
]
}
返回:
"hello boy, I am provider service. you say content is : I am OK !"
```
注意:入参为固定格式,“data”与yml配置保持一致。
# 2. 鉴权
# 3. 熔断限流
# 4. 安全校验
# 5. 日志
# 6. 其他
如上:在gitlab上可以实现,点击目录跳转。
在VScode中,Markdown TOC可以自动生成目录。但是有些auto的标识,我去掉了这些标识、去掉二级和三级目录,增加了回车。markdown-index可以自动生成标题的序号。