apache / shenyu Goto Github PK
View Code? Open in Web Editor NEWApache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.
Home Page: https://shenyu.apache.org/
License: Apache License 2.0
Apache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.
Home Page: https://shenyu.apache.org/
License: Apache License 2.0
请教楼主,这个网关是哪家公司出的呀?网上找soul的出身少的可怜。
不知道是怎么维护的?后面用着用着怕就没了😅
soul如何部署集群,能写个录个视频教程吗?
java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:816) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:797) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:324) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.dromara.soul.bootstrap.SoulBootstrapApplication.main(SoulBootstrapApplication.java:38) [classes/:na]
Caused by: org.dromara.soul.common.exception.SerializerException: JAVA deSerialize error invalid stream header: 01006F72
at org.dromara.soul.configuration.zookeeper.serializer.JavaSerializer.deserialize(JavaSerializer.java:56) ~[classes/:na]
at org.I0Itec.zkclient.ZkClient.derializable(ZkClient.java:1072) ~[zkclient-0.10.jar:na]
at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:1107) ~[zkclient-0.10.jar:na]
at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:1095) ~[zkclient-0.10.jar:na]
at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:1084) ~[zkclient-0.10.jar:na]
at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:1077) ~[zkclient-0.10.jar:na]
at org.dromara.soul.web.cache.ZookeeperCacheManager.watcherPlugin(ZookeeperCacheManager.java:151) ~[classes/:na]
at org.dromara.soul.web.cache.ZookeeperCacheManager.loadPlugin(ZookeeperCacheManager.java:141) ~[classes/:na]
at org.dromara.soul.web.cache.ZookeeperCacheManager.watcherData(ZookeeperCacheManager.java:129) ~[classes/:na]
at org.dromara.soul.web.cache.ZookeeperCacheManager.run(ZookeeperCacheManager.java:118) ~[classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
... 5 common frames omitted
作者好,请问一下soul的吞吐量大概是多少呢,有没有具体的测试呀?
通过soul-admin配置的规则是如何同步到本地缓存的呢?有没有人提示下代码位置
sign的密钥生成使用时间戳字段timestamp的话,如果开启了后端的soul.timeVerify.enabled是不是有冲突
大神,能提供一份原版的index.js文件吗?邮箱 [email protected] 多谢!
可以参考支付宝网关设计增加在线文档、在线测试功能
和soul没关系
Originally posted by @yu199195 in #56 (comment)
比如用CAT,它本身是用threadlocal来收集日志的,但是soul又是异步的,只会把请求转发给后端集群,这样的话,一个请求在网关和后端服务之间是分离的,CAT的threadlocal就不起作用的了呀。
楼主为何要用webflux,做过压测么?用过都知道webflux性能特别低,网上说webflux性能高的,都是什么都不懂的,它的相应式编程都是同步的,delayElement吞吐高是因为用的ScheduleExecutorService,你用webmvc使用同样的方式,性能甩他一条街。他的所有响应编程都是同步的。垃圾一样的框架,网上被一堆什么都不懂的人在吹
文档感觉不详细,特别湿参数那一块,能不能直接贴列子,不好上手
当dubbo换成2.7.x的时候,
使用jmeter,发送500个并发请求,调用divide插件,做http请求,出现大量的错误,并且连接不会断开。
dubbo2.6.x的时候没有这个问题
First of all, my sincere thanks to everyone who continues to care and use Apache ShenYu.We will continue to invest in making the Apache ShenYu better and the Apache ShenYu community more prosperous.In order to better listen to the community and attract more people to use and participate, we look forward to your submission of a comment, including:
Your company, school or organization
Your city and country
Your contact information: weibo, email, WeChat (at least one)
What business scenarios do you use Apache ShenYu for
You can refer to the following sample to provide your information
company : xxx
website:https://shenyu.apache.org/
logo_url :https://shenyu.apache.org/xxxx.jpg
Location: Shenzhen, China
Contact information: [email protected]
Scene: Corporate gateway
019-01-11 15:34:53.673 INFO 155692 --- [ctor-http-nio-2] o.d.soul.web.plugin.AbstractSoulPlugin : order:insert match dubbo rule is name :dubbo
2019-01-11 15:34:53.675 DEBUG 155692 --- [ctor-http-nio-2] com.netflix.hystrix.AbstractCommand : Error executing HystrixCommand.run(). Proceeding to fallback logic ...
java.lang.IllegalStateException: No such extension hash for loadbalance/com.alibaba.dubbo.rpc.cluster.LoadBalance
at com.alibaba.dubbo.config.AbstractConfig.checkExtension(AbstractConfig.java:330) ~[dubbo-2.6.0.jar:2.6.0]
at com.alibaba.dubbo.config.AbstractMethodConfig.setLoadbalance(AbstractMethodConfig.java:88) ~[dubbo-2.6.0.jar:2.6.0]
at org.dromara.soul.web.plugin.dubbo.DubboProxyService.buildReferenceConfig(DubboProxyService.java:169) ~[classes/:na]
at org.dromara.soul.web.plugin.dubbo.DubboProxyService.genericInvoker(DubboProxyService.java:74) ~[classes/:na]
at org.dromara.soul.web.plugin.hystrix.DubboCommand.doRpcInvoke(DubboCommand.java:93) ~[classes/:na]
at org.dromara.soul.web.plugin.hystrix.DubboCommand.construct(DubboCommand.java:89) ~[classes/:na]
at com.netflix.hystrix.HystrixObservableCommand.getExecutionObservable(HystrixObservableCommand.java:252) ~[hystrix-core-1.5.12.jar:1.5.12]
at com.netflix.hystrix.AbstractCommand.getUserExecutionObservable(AbstractCommand.java:887) ~[hystrix-core-1.5.12.jar:1.5.12]
at com.netflix.hystrix.AbstractCommand.access$900(AbstractCommand.java:60) ~[hystrix-core-1.5.12.jar:1.5.12]
at com.netflix.hystrix.AbstractCommand$18.call(AbstractCommand.java:733) ~[hystrix-core-1.5.12.jar:1.5.12]
at com.netflix.hystrix.AbstractCommand$18.call(AbstractCommand.java:718) ~[hystrix-core-1.5.12.jar:1.5.12]
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) [rxjava-1.3.8.jar:1.3.8]
at rx.Observable.unsafeSubscribe(Observable.java:10327) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) [rxjava-1.3.8.jar:1.3.8]
at rx.Observable.unsafeSubscribe(Observable.java:10327) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) [rxjava-1.3.8.jar:1.3.8]
at rx.Observable.unsafeSubscribe(Observable.java:10327) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) [rxjava-1.3.8.jar:1.3.8]
at rx.Observable.unsafeSubscribe(Observable.java:10327) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) [rxjava-1.3.8.jar:1.3.8]
at rx.Observable.unsafeSubscribe(Observable.java:10327) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) [rxjava-1.3.8.jar:1.3.8]
at rx.Observable.unsafeSubscribe(Observable.java:10327) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) [rxjava-1.3.8.jar:1.3.8]
at rx.Observable.unsafeSubscribe(Observable.java:10327) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33) [rxjava-1.3.8.jar:1.3.8]
at rx.Observable.unsafeSubscribe(Observable.java:10327) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) [rxjava-1.3.8.jar:1.3.8]
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) [rxjava-1.3.8.jar:1.3.8]
服务起来后简单配置了Divide过滤,网关基础功能可以实现,但是每次请求都会报一个netty异常, 找了好久没有找到什么原因引起的。
java.io.IOException: 远程主机强迫关闭了一个现有的连接。
at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[na:1.8.0_131]
at sun.nio.ch.SocketDispatcher.read(Unknown Source) ~[na:1.8.0_131]
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) ~[na:1.8.0_131]
at sun.nio.ch.IOUtil.read(Unknown Source) ~[na:1.8.0_131]
at sun.nio.ch.SocketChannelImpl.read(Unknown Source) ~[na:1.8.0_131]
at io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288) ~[netty-buffer-4.1.29.Final.jar:4.1.29.Final]
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1108) ~[netty-buffer-4.1.29.Final.jar:4.1.29.Final]
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:347) ~[netty-transport-4.1.29.Final.jar:4.1.29.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148) ~[netty-transport-4.1.29.Final.jar:4.1.29.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:628) [netty-transport-4.1.29.Final.jar:4.1.29.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:563) [netty-transport-4.1.29.Final.jar:4.1.29.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:480) [netty-transport-4.1.29.Final.jar:4.1.29.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:442) [netty-transport-4.1.29.Final.jar:4.1.29.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) [netty-common-4.1.29.Final.jar:4.1.29.Final]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_131]
感谢作者百忙中回复,刚刚试了下配置dubbo集群,不知道这个怎么配的,代码和管理界面里的规则都得配那些呀?
前端有计划开源吗
FYI
例如findUser/{id}/info
选择器我粗粒度用模块名匹配
然而规则里该怎么写
作者好,感谢前几次的回复。soul是异步的框架,那他怎么使用依赖threadlocal的链路追踪工具呀,比如cat、zipkin这些工具呢?
我是初学者,请多指教。
在视频教学中作者展示了http请求怎么传递多个参数,封装成对象通过@requestbody传递。但是我想知道如何传递单个Integer参数呢,试过很多方法但是都未成功,求教。
请问这套东西有在生产环境部署过嘛,实际使用情况如何
soul目前是使用zookeeper来做数据的的缓存与动态监听刷新。
准备参考Apollo 的长轮询策略来做。
优点 :这样可以去除对zookeeper的依赖,更加轻量级。
缺点: 动态的配置更新可能没有那么及时。依赖与长轮询的时间。
作者好,麻烦问下sou通过nginx实现高可用,那在nginx里你们是怎么得知被转发的那个soul服务是正常的呀,如果要是挂了,nginx是咋得知的。求教作者都是怎么处理这个问题的,感谢感谢!
为什么不在soul服务启动时,将数据库中的plugin、selector等数据加载到zookeeper呢?
是否能够把这两个插件结合起来使用?
目前光看代码,还是有点晕,能否提供一个实践性的例子?比如由客户端发起请求,先经过ng,ng再转发到soul-gateway,现在没有办法知道ng怎么到达soul-gateway的。
我是初学者,在测试超时熔断的时候,在soulbootstrap的控制台中返回没有配置fallback,该在哪里添加fallback?
2019-05-09 11:29:27.451 ERROR 2596 --- [ parallel-1] o.d.soul.web.plugin.hystrix.HttpCommand : http execute have error:Did not observe any item or terminal signal within 5000ms in 'peek' (and no fallback has been configured)
监控插件有界面吗?还是只是把请求数据写到了influxDb呢
Caused by: java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at com.google.gson.stream.JsonReader.nextInt(JsonReader.java:1193)
at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:243)
已经确认端口未被占用,启动时报端口被占用的错误
server:
port: 8086
spring:
datasource:
url: jdbc:mysql://172.27.35.2:3306/soul?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=CONVERT_TO_NULL&failOverReadOnly=false&autoReconnect=true
username: root
password: 123456
dbcp2:
driver-class-name: com.mysql.jdbc.Driver
zookeeper:
url : 172.27.35.2:2181
sessionTimeout: 5000
connectionTimeout : 2000
serializer : KryoSerializer
mybatis:
config-location: classpath:/mybatis/mybatis-config.xml
mapper-locations: classpath:/mappers/*.xml
logging:
level:
root: info
org.springframework.boot: info
org.apache.ibatis: info
org.dromara.soul.bonuspoint: info
org.dromara.soul.lottery: debug
org.dromara.soul: debug
path: "./logs/admin"
2018-11-29 20:31:06.819 DEBUG 71276 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : Application failed to start due to an exception
org.springframework.boot.web.server.PortInUseException: Port 8086 is already in use
at org.springframework.boot.web.embedded.netty.NettyWebServer.start(NettyWebServer.java:73) ~[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext$ServerManager.start(ReactiveWebServerApplicationContext.java:232) ~[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.startReactiveWebServer(ReactiveWebServerApplicationContext.java:130) ~[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.finishRefresh(ReactiveWebServerApplicationContext.java:122) ~[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:67) ~[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]
at org.dromara.soul.admin.SoulAdminApplication.main(SoulAdminApplication.java:43) [classes/:na]
2018-11-29 20:31:06.819 ERROR 71276 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Web server failed to start. Port 8086 was already in use.
Action:
Identify and stop the process that's listening on port 8086 or configure this application to listen on another port.
RT
我使用jemter去调用divide插件时候,500个线程,当总量到达1000之后,请求就返回:{
: "code":-2,
: "message":"this is bad request or fuse ing please try again later",
: "data":null
}。log日志中刷的日志为http:circuitBreaker is Open.... !
rt
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.