同步操作将从 leecho/spring-cloud-gateway-dubbo 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Spring Cloud Gateway Dubbo 基于Spring Cloud Alibaba的SpringCloud集成Dubbo的方案之上开发, 用于在SpringCloudGateway中直接调用Dubbo接口,可以减少使用Web接口来实现与gateway对接。
基础的SpringCloudGateway需要WebApp对Dubbo接口进行调用
网关直接调用Dubbo后无需WebApp进行中转
模块 | 描述 |
---|---|
spring-cloud-gateway-dubbo | 集成Dubbo调用功能,包括路由解析、转发、参数处理、参数重写、结果转换等功能 |
spring-cloud-gateway-dubbo-starter | 集成dubbo功能自动装配 |
spring-cloud-gateway-dubbo-sample | 集成Dubbo调用示例 |
模块 | 描述 |
---|---|
dubbo-provider | Dubbo服务提供方 |
gateway | 网关 |
分别启动:
com.github.leecho.spring.cloud.dubbo.sample.gateway.GatewayApplication
com.github.leecho.spring.cloud.dubbo.sample.provider.DubboProviderApplication
在idea中执行http文件:gateway.http
在Gateway中定义路由
- id: echo
uri: dubbo://dubbo-provider/EchoService/echo
predicates:
- Path=/echo/**
metadata:
dubbo:
group: default
version: 1.0
parameterTypes:
- java.lang.String
dubbo路由uri结构:dubbo://{serviceName}/{interfaceClass}/{method},dubbo接口其他属性在metadata中进行配置,内置的解析器会识别scheme为dubbo的uri,也可以进行自定义
在Gateway中定义路由
- id: rewrite
uri: dubbo://dubbo-provider/EchoService/request
metadata:
dubbo:
group: default
version: 1.0
parameterTypes:
- com.github.leecho.spring.cloud.dubbo.sample.provider.Action
- com.github.leecho.spring.cloud.dubbo.sample.provider.Request
rewrite:
request:
message: "#body['request']['message']"
target:
name: "#cookie['JSESSIONID']"
id: "#header['Authorization']"
date: 2021-07-01 00:00:00
#attributes: "#body['request']['attributes']"
attributes:
- "#header['Authorization']"
- attr2
- attr3
action:
name: request
parameters:
param1: "#auth['user']"
predicates:
- Path=/rewrite/**
配置DubboMessageConverter对象,会自动识别并进行装配:
@Bean
public DubboMessageConverter dubboResultConverter() {
return source -> {
Map<String, Object> result = new HashMap<>(2);
result.put("success", true);
result.put("data", source);
return result;
};
配置DubboGenericServiceCache对象,会自动识别并进行装配:
@Bean
public DubboGenericServiceCache dubboGenericServiceCache() {
return new GuavaDubboGenericServiceCache(1000, Duration.of(10, ChronoUnit.SECONDS));
}
配置VariableLoader对象
@Bean
public VariableLoader authVariableProcessor() {
return context -> {
Map<String, Object> auth = new HashMap<>();
auth.put("user", "user");
context.setVariable("auth", auth);
};
}
欢迎大家进行使用及测试,有任何问题可以在平台上提交issue或者站内信联系我,也欢迎大家提交pr,共同为开源社区提供更好的方案。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。