当前位置: 首页 > 软件库 > 程序开发 > 网络工具包 >

Dubbo Gateway

基于 Java 的 Dubbo 网关实现
授权协议 Apache
开发语言 Java
所属分类 程序开发、 网络工具包
软件类型 开源软件
地区 国产
投 递 者 呼延化
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Dubbo Gateway是一个基于Java语言的Dubbo网关实现。基于Dubbo注册中心的元数据,通过将HTTP请求转换为Dubbo协议,泛化调用的方式返回请求结果。它具有如下的特性:

  1. 使用简单,开箱即用,非常适用于一些接口测试场景;
  2. 灵活可拓展。通过Interceptor的实现,可非常方便实现熔断、限流、路由、定制响应、用户授权等功能。系统也内置了部分Interceptor实现;
  3. 支持仅调用声明为对外开放的Dubbo服务,安全保证。(基于Feature:apache/dubbo#7660 );
  4. 文档自动化生成。基于Javadoc标准的dubbo对外接口生成系统,API写好即可生成文档,同时集成了阿里云OSS,全程仅需几步参数配置,即可可视化预览文档。

Requirements

服务提供者Dubbo 版本:Dubbo 2.7.14+ 或 Dubbo 3.x

Java 版本:1.8+

Guides

以Springboot项目方式,启动Dubbo Gateway网关:

1、添加依赖

新建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>

2、参数配置

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

3、启动服务

@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");
		}
	}
}

4、访问目标服务

系统内置了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 类,即可轻松实现自定义的路由规则。

Param Transmission

用户端通用参数(诸如请求UA/Referer/IP等)以及Token用户信息等,需要传递到服务提供方。Dubbo Gateway与服务提供者之间内置的参数传递走Dubbo的RpcContext。

Dubbo网关内置了gatewayConsumerFiltergatewayProviderFilter,可作为Dubbo服务提供者的默认Filter实现,通过该Filter可获取用户端请求的一些参数以及自定义拦截器封装的参数。当然,开发者也可自行在服务提供方读取RpcContext中的传递参数。

更多使用方式,参考:gateway-samples  gateway-samples-provider

Attention

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扩展进行加载。