Dubbo Gateway是一个基于Java语言的Dubbo网关实现。基于Dubbo注册中心的元数据,通过将HTTP请求转换为Dubbo协议,泛化调用的方式返回请求结果。它具有如下的特性:
服务提供者Dubbo 版本:Dubbo 2.7.14+ 或 Dubbo 3.x
Java 版本:1.8+
以Springboot项目方式,启动Dubbo Gateway网关:
新建Springboot工程,添加Dubbo Gateway的核心依赖:
<dependency> <groupId>com.kalman03</groupId> <artifactId>gateway-core</artifactId> <version>1.2.0</version> </dependency>
当然,还需要添加Dubbo的注册中心依赖,以Zookeeper为例:
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper_version}</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${curator_version}</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${curator_version}</version> </dependency>
gateway.netty.server.port=80 gateway.netty.server.host=127.0.0.1 gateway.netty.server.connect-timeout=3000 gateway.netty.business.thread-count=50 gateway.dubbo.registry.address=zookeeper://127.0.0.1:2181 gateway.dubbo.openservice=true
@SpringBootApplication @EnableAutoConfiguration public class DubboGatewayTest { public static void main(String[] args) { try { SpringApplication.run(DubboGatewayTest.class, args); } catch (Throwable e) { e.printStackTrace(); } } //可选自定义拦截器 @Component @Order(100) @InterceptorRule(routeRuleType = RouteRuleType.PATH, excludePatterns = { "/api/**" }) class CustomInterceptor implements HandlerInterceptor { @Override public boolean preHandle(GatewayHttpRequest request, GatewayHttpResponse response) throws Exception { System.out.println("preHandle"); return true; } @Override public void afterCompletion(GatewayHttpRequest request, GatewayHttpResponse response, Exception ex) throws Exception { System.out.println("afterCompletion"); } } }
系统内置了PATH路由
与MIX路由
,也同时支持自定义路由实现。下面演示如何通过不同的路由规则访问对应的服务。
PATH路由(推荐)
PATH路由是系统内置默认的路由,也是系统推荐的路由规则,其拥有较多适用性(既可正常调用,也可以满足一些第三方系统的调用要求,比如支付消息回调等),路由规则如下
HTTP URL:
http(s)://{domain}:{port}/{appName}/{interfaceName}/{method}/{group}/{version}
HTTP Body (payload or form-data):
{
"id": 23,
"username": "testUser"
}
MIX路由
考虑到有些参数相对于固定不变,且暴露在URL中不尽友善,系统内置了一种MIX的路由规则,将部分路由参数以Header的参数形式进行传递。
HTTP URL:
http(s)://{domain}:{port}/{interfaceName}/{method}
HTTP Header:
x-app-name={appName}
x-group={group}
x-version={version}
x-route-rule=mix
HTTP Body (payload or form-data):
{
"id": 23,
"username": "testUser"
}
CUSTOM自定义路由
CUSTOM路由
专为一些对PATH路由
与MIX路由
都不满意的开发者准备,只需要继承AbstractRouteHandlerInterceptor 类,即可轻松实现自定义的路由规则。
用户端通用参数(诸如请求UA/Referer/IP等)以及Token用户信息等,需要传递到服务提供方。Dubbo Gateway与服务提供者之间内置的参数传递走Dubbo的RpcContext。
Dubbo网关内置了gatewayConsumerFilter
与gatewayProviderFilter
,可作为Dubbo服务提供者的默认Filter实现,通过该Filter可获取用户端请求的一些参数以及自定义拦截器封装的参数。当然,开发者也可自行在服务提供方读取RpcContext中的传递参数。
更多使用方式,参考:gateway-samples 与 gateway-samples-provider
Dubbo Gateway对Dubbo服务提供者提供的对外服务有一条要求:只能有一个服务入参,且为对象类型(非普通Java数据类型)。
主要为了解决SOA服务框架对外提供api相关问题,主要涉及如下几个方面: 统一鉴权 限流 防攻击 系统拆分 api横向扩展、高可用、负载均横 服务自动扩缩 … 为了解决上面的一系列问题,所以需要一个网关系统来作为外部服务调用的统一入口。本方案 分两部分: 第一部分 具体代码请参见 https://github.com/zhuzhong/gateway-dubbox.git 后端服务采用
前言 服务目录在刷新Invoker列表的过程中,会通过Router进行服务路由,筛选出符合路由规则的服务提供者。 服务路由包含一条路由规则,路由规则决定了服务消费者可以调用哪些服务提供者。 Dubbo目前提供了三种服务路由实现 - 条件路由(ConditionRouter)、脚本路由(ScriptRouter)、标签路由(TagRouter)。 条件路由的使用 可以在服务治理控制台 Dubbo-A
1. 简介 上一篇文章分析了集群容错的第一部分 — 服务目录 Directory。服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由,筛选出符合路由规则的服务提供者。在详细分析服务路由的源码之前,先来介绍一下服务路由是什么。服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。Dubbo 目前提供了三种服务路由实现,分别
本文章仅作为个人笔记 nacos 接入 gateway 参考 nacos 的服务安装(这里都仅处理单机模式) 官网下载运行 startup.cmd (与docker方案二选一) docker安装运行 (与直接下载方案二选一) docker run --network=mys --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos
服务路由 筛选出符合路由规则的服务提供者。服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。 路由规则在发起一次RPC调用前起到过滤目标服务器地址的作用,过滤后的地址列表将作为消费端最终发起RPC调用的备选地址。 条件路由。支持以服务或者Consumer应用为粒度配置路由规则。 标签路由。支持以Provider应用为粒度配置路由规则。 脚本路由。
本文向大家介绍关于ResNeXt网络的pytorch实现,包括了关于ResNeXt网络的pytorch实现的使用技巧和注意事项,需要的朋友参考一下 此处需要pip install pretrainedmodels 以上这篇关于ResNeXt网络的pytorch实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
我尝试基于Akka创建一些使用CQRS的微服务。所以我的微服务有Httpendpoint的写端(向集群发送命令)和读端(从数据库读取投影),但这不是主要问题。由于许多微服务,问题出现了为客户端收集复杂的API。我找到了答案:API网关模式。但我还有下一个问题:如何实现它? > < li> 我可以创建单独的项目,该项目将实现API网关模式(在简单的情况下,它是一个反向代理)。完整堆栈将: 赞成的意见
一、Memcached简介 memcached是一款非常普及的服务器端缓存软件,memcached主要是基于Libevent库进行开发的。 如果你还不了解libevent相关知识,请先看我的 libevent 这篇文章《Linux c 开发 - libevent 》 memcached也是使用autotools的进行代码编译管理的,如果你还不了解autotools,你可以先看下文章:《Linux
本文向大家介绍基于C#实现网页爬虫,包括了基于C#实现网页爬虫的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了基于C#实现网页爬虫的详细代码,供大家参考,具体内容如下 HTTP请求工具类: 功能: 1、获取网页html 2、下载网络图片 多线程爬取网页代码: 截图: 以上就是本文的全部内容,希望对大家的学习有所帮助。
本文向大家介绍Java基于ReadWriteLock实现锁的应用,包括了Java基于ReadWriteLock实现锁的应用的使用技巧和注意事项,需要的朋友参考一下 所有 ReadWriteLock 实现都必须保证 writeLock 操作的内存同步效果也要保持与相关 readLock 的联系。也就是说,成功获取读锁的线程会看到写入锁之前版本所做的所有更新。 与互斥锁相比,读-写锁允许对共享数据进行
本文向大家介绍Python Matplotlib 基于networkx画关系网络图,包括了Python Matplotlib 基于networkx画关系网络图的使用技巧和注意事项,需要的朋友参考一下 前言 昨天才开始接触,鼓捣了一个下午,接下来会持续更新,如果哪里有错误的地方,望各位大佬指出,谢谢! 数据描述 两个文件,一个文件包含了网络图的节点,节点存在类别(0,1,2,3)四类,但是0类别舍去
本文向大家介绍python基于socket实现网络广播的方法,包括了python基于socket实现网络广播的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python基于socket实现网络广播的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。
本文向大家介绍Dubbo与Spring的关系?相关面试题,主要包含被问及Dubbo与Spring的关系?时的应答技巧和注意事项,需要的朋友参考一下 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。