您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java 界最好的 API 网关 Soul

时间:2019-12-27 09:43:55  来源:  作者:

soul网关发布2.1.0版本 (做JAVA界最好的API-Gateway)

  • 这是soul网关开源以来的最大的一次更新,收集了很多社区反馈的问题,进行了更新.

  • 之前的文档不是很完善,使用成本较高,这里先说声抱歉,这一个版本中,同时更新了相关文档.

  • 在这个版本中,提供 http,dubbo,springcloud等服务快速接入网关的功能.

  • 在这个版本中一切都是可扩展的,具体的可以看开发者文档.

  • 修护了很多问题,优化了很多性能,包括线程模型,异步模型等等.

  • 新增一个元数据的概念。

  • 以后的版本更新,基本上以这个版本为基础原型,来进行更新了.

  • 使用之前版本的用户,如果要升级的话,可以在群里问。。

  • 更新了太多太多地方,无法一一列举,大家只能去看文档了.

 

快速启动 soul-admin

> wget https://yu199195.github.io/jar/soul-admin.jar

> java -jar soul-admin.jar --spring.datasource.url="jdbc:MySQL://你的url:3306/soul?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_&failOverReadOnly=false&autoReconnect=true&useSSL=false"
--spring.datasource.username='you username' --spring.datasource.password='you password'

 

快速启动 soul-bootstrap

> wget https://yu199195.github.io/jar/soul-bootstrap.jar

> java -jar soul-bootstrap.jar
  • 这样soul网关就启动了

 

springMvc服务接入

参考文档: https://dromara.org/zh-cn/docs/soul/joinUp-mvc.html

 

dubbo服务接入

参考文档: https://dromara.org/zh-cn/docs/soul/joinUp-dubbo.html

 

springCloud服务接入

参考文档: https://dromara.org/zh-cn/docs/soul/joinUp-springcloud.html

 

代码与文档

github : https://github.com/Dromara/soul

gitee : https://gitee.com/shuaiqiyu/soul

文档: https://dromara.org/zh-cn/docs/soul/soul.html

 

Soul网关发布2.1.X之后,它到底有多方便?

Soul网关自从去年10月我开源以来,经历了一年的事情,接受到了来自社区很多朋友的建议,并进行持续不断的优化,已经提供了非常丰富的功能,很多功能都是高度自定义,可视化,高度可扩展的,现在做一个归纳总结。

插件

  • 提供了系统自带的各种插件,比如签名,监控,限流,熔断,http代理,dubbo代理,websocket等等。

  • 支持用户快速的进行插件的自定义开发。

  • 插件的所有数据,开关状态支持动态变更。

数据同步

  • 提供了 http长轮询zookeeperwebsocket三种不同的数据同步策略,让用户自由选择。

  • 推荐用户使用websocket方式,最轻量,在集群环境下,效率更高。

对于用户

  • 首先我们提供了便于用户接入的 client包,用户可以把快速的把自己的项目接入到soul网关。

  • 默认情况下,用户完全不用关心 soul网关的选择器,规则等配置。

  • 用户之前的接口完全是零侵入,不需要任何更改,只是需要把访问域名改成网关的域名即可。

  • 比如 dubbo用户,几乎就是http的方式完成了 http协议到 dubbo协议的互相转换。

  • soul使用的是http协议,那么注定它就是跨语言的,net程序员php程序员等等,要和java进行数据交互,那么就大大的可行了。

    举个列子 ,比如你有一个 dubbo接口 参数定义是一个java bean,

    public void insert(final DubboTest dubboTest) {
    
    }
    
    public class DubboTest implements Serializable {
    
    private String id;
    
    private String name;
    }
    

    如果你使用 soul网关要发起对它的调用,你的http传参数 就是在 body 里面 传一个json字符串 ,和普通的http调用无差别。

    {"id":"123","name":"xiaoyu"}
    

对于开发者(程序员)

  • 随着使用者越来越多,每个公司使用情况又不一样,soul网关在2.1.X版本,处处留出来更多的高度自定义扩展性,让开发者,更加方便或者有信心融入进来。

  • 比如,自定义插件,过滤器,dubbo参数解析器,iphost解析器,返回结果等等。。这里我着重说一下自定义返回结果。

    我们知道,soul网关默认的返回结果是:

    {"code":200, "message ": "成功!","data" :"helloWorld!"}
    

    但是,在运用 soul网关对你的业务系统进行调用的时候,你的业务系统可能定义的结果并不是上述结构,可能你的 字段叫msg,这样就会造成结构不一样,给前端处理带来了困扰。我们注意到了这个事情 :https://github.com/Dromara/soul/issues/109 , 现在已经优化,用户可以定制化的来定义返回结果,具体的要看soul文档。

说了这么多,吹了这么多牛逼,那么我们来看看 soul网关到底可以在什么场景下能发挥大作用。

后台管理web

首先随便微服务的流行,我们的后台都划分成很多的微服务,我相信你们每个公司都有一个后台管理系统吧,如果我没猜错的话,他们大体上是如下架构

Java 界最好的 API 网关 Soul

很简单对吧,就是有个运营管理平台的web项目,去调用每个微服务,来进行后台的查看等等。随着你们业务需要的加大,可能这里需要调用的微服务越来越多,你的 controller越来越多,现在比如你修改了 商品模块的 接口,你要发版会造成所有其他的模块也操作不了(就是你发版影响了其他模块的使用,别杠这里只是比方,不要整蓝绿发版啥的,明白意思吧)。

如果有运营人员在操作其他模块,会不会吐槽你?

假如你是公司架构师,我说的是假如,那么你要怎么解决这个问题呢?当然,我们把这样一个大的web系统,拆分成很多小web系统,单独的进行发布,但是这样会引入一个问题,怎么统一登陆,鉴权?(很多后台管理系统还有权限的划分) ,这个时候,soul网关 就能发挥重要的作用了,下面我只是列举了一下简单的调用图。

Java 界最好的 API 网关 Soul

这样多方便,集成了网关,每个微服务注册到网关,网关根据路由规则来进行调用。自动发现服务,连运维配置 Nginx的工作都省了,把运维的工资给你,美滋滋。

公司入口网关(开放平台)

如果一个公司要做开放平台或者入口网关,鉴权,限流,监控,熔断肯定少不了。

如果贵公司是dubbo体系,开发人员写了dubbo服务后,还要傻乎乎的新增一个web项目,来提供接口给别人调用吗?

如果一个接口被攻击,你怎么处理呢?如果被大流量攻击,你怎么处理呢?

不巧,soul设计之初就是来干这种事情的,我们来看一下整体的架构图。

Java 界最好的 API 网关 Soul

 

零零总总还有很多其他功能

  • 比如支持 websocket代理。

  • 比如支持文件上传下载

  • 比如你可以自定义的开发你的插件啊。

 

最后最后

  • github地址 :https://github.com/Dromara/soul

  • gitee地址 :https://gitee.com/shuaiqiyu/soul

  • 文档:https://dromara.org/zh-cn/docs/soul/soul.html

  •  
  • 最后 3.0 已经在进行开源了,3.0是经历过2年双11大并发场景验证过的,现在一步一步将它开源出来,希望给大家带来帮助.



Tags:Java API   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
soul网关发布2.1.0版本 (做Java界最好的API-Gateway) 这是soul网关开源以来的最大的一次更新,收集了很多社区反馈的问题,进行了更新. 之前的文档不是很完善,使用成本较高,这里先...【详细内容】
2019-12-27  Tags: Java API  点击:(124)  评论:(0)  加入收藏
我们通过为自行车商店构建示例应用程序来学习如何使用 JPA。-- Stephon Brown(作者) 对应用开发者来说, Java 持久化 API(Java Persistence API)(JPA)是一项重要的 java 功能,需...【详细内容】
2019-12-27  Tags: Java API  点击:(75)  评论:(0)  加入收藏
关闭HDFS的权限检查设置完成重启HDFS集群查看文件 编辑后的文件 启动HDFS集群 创建maven项目,配置pom文件(核心配置代码) 1、 创建一个目录创建运行类,编写测试方法我们在集群中...【详细内容】
2019-09-11  Tags: Java API  点击:(191)  评论:(0)  加入收藏
时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。 UTC(Universal Time Coordinated):统...【详细内容】
2019-08-26  Tags: Java API  点击:(222)  评论:(0)  加入收藏
01、Object常用的方法Object常用的方法有clone、equals、hashCode、notify、notifyAll、toString、wait、finalize。02、String与StringBuffer区别String与StringBuffer在...【详细内容】
2019-08-19  Tags: Java API  点击:(214)  评论:(0)  加入收藏
▌简易百科推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(11)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(13)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(11)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(19)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(22)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条