Dubbox now means Dubbo eXtensions, and it adds features like RESTful remoting, Kyro/FST serialization, etc to the Dubbo service framework.

Related tags

Miscellaneous dubbox
Overview

Dubbox now means Dubbo eXtensions. If you know java, javax and dubbo, you know what dubbox is :)

Dubbox adds features like RESTful remoting, Kyro/FST serialization, etc to the popular dubbo service framework. It's been used by several projects of dangdang.com, which is one of the major e-commerce companies in China.

主要贡献者

有技术问题请移步此处讨论 https://github.com/dangdangdotcom/dubbox/issues

Dubbox当前的主要功能

  • 支持REST风格远程调用(HTTP + JSON/XML):基于非常成熟的JBoss RestEasy框架,在dubbo中实现了REST风格(HTTP + JSON/XML)的远程调用,以显著简化企业内部的跨语言交互,同时显著简化企业对外的Open API、无线API甚至AJAX服务端等等的开发。事实上,这个REST调用也使得Dubbo可以对当今特别流行的“微服务”架构提供基础性支持。 另外,REST调用也达到了比较高的性能,在基准测试下,HTTP + JSON与Dubbo 2.x默认的RPC协议(即TCP + Hessian2二进制序列化)之间只有1.5倍左右的差距,详见文档中的基准测试报告。

  • 支持基于Kryo和FST的Java高效序列化实现:基于当今比较知名的KryoFST高性能序列化库,为Dubbo默认的RPC协议添加新的序列化实现,并优化调整了其序列化体系,比较显著的提高了Dubbo RPC的性能,详见文档中的基准测试报告。

  • 支持基于Jackson的JSON序列化:基于业界应用最广泛的Jackson序列化库,为Dubbo默认的RPC协议添加新的JSON序列化实现。

  • 支持基于嵌入式Tomcat的HTTP remoting体系:基于嵌入式tomcat实现dubbo的HTTP remoting体系(即dubbo-remoting-http),用以逐步取代Dubbo中旧版本的嵌入式Jetty,可以显著的提高REST等的远程调用性能,并将Servlet API的支持从2.5升级到3.1。(注:除了REST,dubbo中的WebServices、Hessian、HTTP Invoker等协议都基于这个HTTP remoting体系)。

  • 升级Spring:将dubbo中Spring由2.x升级到目前最常用的3.x版本,减少版本冲突带来的麻烦。

  • 升级ZooKeeper客户端:将dubbo中的zookeeper客户端升级到最新的版本,以修正老版本中包含的bug。

  • 支持完全基于Java代码的Dubbo配置:基于Spring的Java Config,实现完全无XML的纯Java代码方式来配置dubbo

  • 调整Demo应用:暂时将dubbo的demo应用调整并改写以主要演示REST功能、Dubbo协议的新序列化方式、基于Java代码的Spring配置等等。

  • 修正了dubbo的bug 包括配置、序列化、管理界面等等的bug。

注:dubbox和dubbo 2.x是兼容的,没有改变dubbo的任何已有的功能和配置方式(除了升级了spring之类的版本)

文档资料

在Dubbo中开发REST风格的远程调用(RESTful Remoting)

在Dubbo中使用高效的Java序列化(Kryo和FST)

使用JavaConfig方式配置dubbox

Dubbo Jackson序列化使用说明

Demo应用简单运行指南

Dubbox@InfoQ

Dubbox Wiki (由社区志愿者自由编辑的)

版本

详见:https://github.com/dangdangdotcom/dubbox/releases

  • dubbox-2.8.0:主要支持REST风格远程调用、支持Kryo和FST序列化、升级了Spring和Zookeeper客户端、调整了demo应用等等
  • dubbox-2.8.1:主要支持基于嵌入式tomcat的http-remoting,优化了REST客户端性能,在REST中支持限制服务端接纳的最大HTTP连接数等等
  • dubbox-2.8.2
    • 支持REST中的HTTP logging,包括HTTP header的字段和HTTP body中的消息体,方便调试、日志纪录等等
    • 提供辅助类便于REST的中文处理
    • 改变使用@Reference annotation配置时的异常处理方式,即当用annotation配置时,过去dubbo在启动期间不抛出依赖服务找不到的异常,而是在具体调用时抛出NPE,这与用XML配置时的行为不一致。
    • 较大的充实了Dubbo REST的文档
  • dubbox-2.8.3
    • 在REST中支持dubbo统一的方式用bean validation annotation作参数校验(沈理)
    • 在RpcContext上支持获取底层协议的Request/Response(沈理)
    • 支持采用Spring的Java Config方式配置dubbo(马金凯)
    • 在Dubbo协议中支持基于Jackson的json序列化(Dylan)
    • 在Spring AOP代理过的对象上支持dubbo annotation配置(Dylan)
    • 修正Dubbo管理界面中没有consumer时出现空指针异常(马金凯)
    • 修正@Reference annotation中protocol设置不起作用的bug(沈理)
    • 修正@Reference annotation放在setter方法上即会出错的bug(Dylan)

依赖

从dubbox-2.8.4开始,所有依赖库的使用方式将和dubbo原来的一样:即如果要使用REST、Kyro、FST、Jackson等功能,需要用户自行手工添加相关的依赖。例如:

REST风格远程调用

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>3.0.7.Final</version>
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-client</artifactId>
    <version>3.0.7.Final</version>
</dependency>
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.0.0.GA</version>
</dependency>

<!-- 如果要使用json序列化 -->
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson-provider</artifactId>
    <version>3.0.7.Final</version>
</dependency>

<!-- 如果要使用xml序列化 -->
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxb-provider</artifactId>
    <version>3.0.7.Final</version>
</dependency>

<!-- 如果要使用netty server -->
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-netty</artifactId>
    <version>3.0.7.Final</version>
</dependency>

<!-- 如果要使用Sun HTTP server -->
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jdk-http</artifactId>
    <version>3.0.7.Final</version>
</dependency>

<!-- 如果要使用tomcat server -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>8.0.11</version>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-logging-juli</artifactId>
    <version>8.0.11</version>
</dependency>

Kyro序列化

<dependency>
    <groupId>com.esotericsoftware.kryo</groupId>
    <artifactId>kryo</artifactId>
    <version>2.24.0</version>
</dependency>
<dependency>
    <groupId>de.javakaffee</groupId>
    <artifactId>kryo-serializers</artifactId>
    <version>0.26</version>
</dependency>

FST序列化

<dependency>
    <groupId>de.ruedigermoeller</groupId>
    <artifactId>fst</artifactId>
    <version>1.55</version>
</dependency>

Jackson序列化

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.3.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.3.3</version>
</dependency>

FAQ(暂存)

Dubbox需要什么版本的JDK?

目前最好在JDK 1.7以上运行

Dubbo REST的服务能和Dubbo注册中心、监控中心集成吗?

可以的,而且是自动集成的,也就是你在dubbo中开发的所有REST服务都会自动注册到服务册中心和监控中心,可以通过它们做管理。

但是,只有当REST的消费端也是基于dubbo的时候,注册中心中的许多服务治理操作才能完全起作用。而如果消费端是非dubbo的,自然不受注册中心管理,所以其中很多操作是不会对消费端起作用的。

Dubbo REST中如何实现负载均衡和容错(failover)?

如果dubbo REST的消费端也是dubbo的,则Dubbo REST和其他dubbo远程调用协议基本完全一样,由dubbo框架透明的在消费端做load balance、failover等等。

如果dubbo REST的消费端是非dubbo的,甚至是非java的,则最好配置服务提供端的软负载均衡机制,目前可考虑用LVS、HAProxy、 Nginx等等对HTTP请求做负载均衡。

JAX-RS中重载的方法能够映射到同一URL地址吗?

http://stackoverflow.com/questions/17196766/can-resteasy-choose-method-based-on-query-params

JAX-RS中作POST的方法能够接收多个参数吗?

http://stackoverflow.com/questions/5553218/jax-rs-post-multiple-objects

Comments
  • dubbox 2.8.4源代码拉出来用maven编译会出现异常

    dubbox 2.8.4源代码拉出来用maven编译会出现异常

    当用maven去编译dubbox2.8.4的时候,对于dubbox\dubbo-rpc\dubbo-rpc-hessian这个工程会出现异常: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project dubbo-rpc-hessian: Compilation failure [ERROR] \git repository\dubbox\dubbo-rpc\dubbo-rpc-hessian\src\main\java\com\alibaba\dubbo\rpc\protocol\hessian\HttpClientConnection.java:[37,7] 错误: HttpClientConnection不是抽象的, 并且未覆盖HessianConnection中的抽象方法getContentEncoding()

    opened by LouisLei 10
  • 这个报错是什么 运行demo的消费者 按照dubbo的方式启动dubbox启动不了

    这个报错是什么 运行demo的消费者 按照dubbo的方式启动dubbox启动不了

    2017-03-22 16:24:03,035 [main] ERROR com.alibaba.dubbo.container.Main (Main.java:86) - [DUBBO] Error creating bean with name 'com.alibaba.dubbo.demo.consumer.DemoAction#0' defined in URL [jar:file:/usr/local/dubbo-demo-consumer-2.8.4/lib/dubbo-demo-consumer-2.8.4.jar!/META-INF/spring/dubbo-demo-action.xml]: Cannot resolve reference to bean 'bidService' while setting bean property 'bidService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bidService': FactoryBean threw exception on object creation; nested exception is org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeout: 5000, dubbo version: 2.8.4, current host: 127.0.0.1

    ================================ 版本2.8.4

    [root@OS6-node1 dubbo-demo-consumer]# grep -v "#" /usr/local/dubbo-demo-consumer/conf/dubbo.properties 
    dubbo.container=log4j,spring
    dubbo.application.name=demo-consumer
    dubbo.application.owner=
    dubbo.registry.address=zookeeper://10.0.0.130:2181
    dubbo.monitor.protocol=registry
    dubbo.log4j.file=logs/dubbo-demo-consumer.log
    dubbo.log4j.level=WARN
    

    #执行这个命令报错的 dubbo-demo-consumer/bin/start.sh

    opened by kuops 9
  • 使用FST或者Kyro序列化,当服务的方法参数含有Java原生数据类型时,就会出错

    使用FST或者Kyro序列化,当服务的方法参数含有Java原生数据类型时,就会出错

    2.8.4版本,使用FST或者Kryo序列化,当服务的方法参数含有Java原生数据类型时(比如int,long等),就会出错。需要换成Integer、Long

    FST出现java.io.EOFException Kryo出现java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map

    opened by kaywood 8
  • 文档中的疑问

    文档中的疑问

    请问可否举个例子说明一下如何通过GET来做删操作,POST做改操作的话是否是通过提交的数据中增加特殊标记字段让服务端来处理。

    REST服务中虽然建议使用HTTP协议中四种标准方法POST、DELETE、PUT、GET来分别实现常见的“增删改查”,但实际中,我们一般情况直接用POST来实现“增改”,GET来实现“删查”即可
    
    opened by wanghaisheng 8
  • KYRO序列化问题咨询

    KYRO序列化问题咨询

    请问我使用KRYO进行序列化的时候,我有一个自己定义的PRODUCT对象,但是使用KYRO进行序列化的时候,就报出了下面这个EXCEPTION,: com.esotericsoftware.kryo.KryoException: java.lang.IndexOutOfBoundsException: Index: 183, Size: 1|Serialization trace:|backCam (xxx.xxx.product.bean.Product)<|java.io.IOException: com.esotericsoftware.kryo.KryoException: java.lang.IndexOutOfBoundsException: Index: 183, Size: 1|Serialization trace:|backCam (xxx.xxxx.product.bean.Product)<|?at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:127)<|?at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:140)<|?at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:151)<|?at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcResult.decode(DecodeableRpcResult.java:87)<|?at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcResult.decode(DecodeableRpcResult.java:117)<|?at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:98)<|?at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:134)<|?at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:95)<|?at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:46)<|?at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:134)<|?at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)<|?at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)<|?at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)<|?at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)<|?at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)<|?at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)<|?at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:109)<|?at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312)<|?at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:90)<|?at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)<|?at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)<|?at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)<|?at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)<|?at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)<|?at java.lang.Thread.run(Thread.java:745)<|Caused by: com.esotericsoftware.kryo.KryoException: java.lang.IndexOutOfBoundsException: Index: 183, Size: 1|Serialization trace:|backCam (xxx.xxxx.product.bean.Product)<|?at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:144)<|?at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:551)<|?at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:790)<|?at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:125)<|?... 24 more<|Caused by: java.lang.IndexOutOfBoundsException: Index: 183, Size: 1<|?at java.util.ArrayList.rangeCheck(ArrayList.java:653)<|?at java.util.ArrayList.get(ArrayList.java:429)<|?at com.esotericsoftware.kryo.util.MapReferenceResolver.getReadObject(MapReferenceResolver.java:60)<|?at com.esotericsoftware.kryo.Kryo.readReferenceOrNull(Kryo.java:834)<|?at com.esotericsoftware.kryo.Kryo.readObjectOrNull(Kryo.java:757)<|?at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:132)<|?... 27 more<|

    我使用的PRODUCT对象,都是一些基本的类型,像这些: public class Product implements Serializable {

    private Integer id;         
    
    private String brand;               
    
    
    private Float price;             
    
    private Date time;        
    
    private String desc;           
    
    private Boolean hasGps;            
    

    配置我也按照DEOM进行了配置:

    dubbo:protocol name="dubbo" serialization="dubbo" optimizer="xxx.xxx.common.SerializationOptimizerImpl"

    也有注册这个类: public class SerializationOptimizerImpl implements SerializationOptimizer {

    @Override
    public Collection<Class> getSerializableClasses() {
        List<Class> classes = new ArrayList<>();
        classes.add(Product.class);
        return classes;
    }
    

    }

    请问是不是我这边写错了什么呢?

    opened by iceray 5
  • ReaderInterceptor不起作用

    ReaderInterceptor不起作用

    @Priority(Priorities.USER)
    public class DemoInterceptor implements ReaderInterceptor, WriterInterceptor {
    
        public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {
            System.out.println("Reader interceptor invoked");
    
            return context.proceed();
        }
    
        public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
            System.out.println("Writer interceptor invoked");
            context.proceed();
        }
    }
    

    按照官方例子,却发现ReaderInterceptor不起作用,只打印出"Writer interceptor invoked",断点也无法捕获在对应位置,可以证明确实是没有调用。

    请问如何解决?

    opened by kazaff 5
  • 关于REST合并到DUBBO主干的提议

    关于REST合并到DUBBO主干的提议

    目前dubbo正在并将长期维护中,非常希望合并dubbo其他分支的优秀功能。REST的功能是优先级比较高的需求,考虑到

    1. dubbox的rest实现很完善,文档全面,并且有生产环境的检验,稳定性有保障
    2. 使用dubbox的rest功能的用户较多,可以平滑迁移

    希望可以先将rest的功能合并到dubbo主干,希望得到dubbox作者(@li-shen)支持 : https://github.com/alibaba/dubbo/pull/917

    opened by Authorlove 4
  • Dubbox should be on opentracing supported framework list

    Dubbox should be on opentracing supported framework list

    As the only Chinese member of opentracing oragnization, we have many supported frameworks, and supported tracers.

    Dubbox, as an important rpc framework in China, I hope it can be on that list. Like other famous Chinese rpc framework have done, such as motan, hprose.

    If you want to join us, please let me know.

    If you know what you know what is OpenTracing? ref these two: http://opentracing.io and https://github.com/opentracing-contrib/opentracing-specification-zh

    opened by wu-sheng 4
  • 使用dubbox-admin打包编译后war启动报错

    使用dubbox-admin打包编译后war启动报错

    38 java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: Root WebApplicationContext: startup date [Wed Dec 30 21:41:29 CST 2015]; root of context hierar> 39 at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:344) 40 at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331) 41 at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:869) 42 at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:836) 43 at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:579) 44 at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:115) 45 at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4980) 46 at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5626) 47 at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) 48 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160) 49 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 50 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 51 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 52 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1113) 53 at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1671) 54 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 55 at java.util.concurrent.FutureTask.run(FutureTask.java:262) 56 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 57 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 58 at java.lang.Thread.run(Thread.java:744) 59 2015-12-30 21:41:29,186 [localhost-startStop-1] WARN org.springframework.context.support.AbstractApplicationContext (AbstractApplicationContext.java:880) - Exception thrown from LifecycleProcessor on context close dubbo-governance.log Line:16/395[4%]Col:1Buf:#1[9][0x9] 337 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 338 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 339 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 340 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 341 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1113) 342 at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1671) 343 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 344 at java.util.concurrent.FutureTask.run(FutureTask.java:262) 345 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 346 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 347 at java.lang.Thread.run(Thread.java:744) 348 Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml] 349 at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141) 350 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330) 351 ... 25 more 352 2015-12-30 22:01:06,227 [localhost-startStop-1] INFO org.springframework.context.support.AbstractApplicationContext (AbstractApplicationContext.java:862) - Closing Root WebApplicationContext: startup date [Wed Dec 30 22:01:06 CST 20> 353 2015-12-30 22:01:06,237 [localhost-startStop-1] WARN org.springframework.context.support.AbstractApplicationContext (AbstractApplicationContext.java:872) - Exception thrown from ApplicationListener handling ContextClosedEvent 354 java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: Root WebApplicationContext: startup date [Wed Dec 30 22:01:06 CST 2015]; root of context hierar> 355 at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:344) 356 at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331) 357 at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:869) 358 at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:836) 359 at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:579) 360 at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:115) 361 at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4980) 362 at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5626) 363 at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) 364 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160) 365 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 366 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 367 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 368 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1113) 369 at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1671) 370 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 371 at java.util.concurrent.FutureTask.run(FutureTask.java:262) 372 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 373 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 374 at java.lang.Thread.run(Thread.java:744) 375 2015-12-30 22:01:06,239 [localhost-startStop-1] WARN org.springframework.context.support.AbstractApplicationContext (AbstractApplicationContext.java:880) - Exception thrown from LifecycleProcessor on context close 376 java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: Root WebApplicationContext: startup date [Wed Dec 30 22:01:06 CST 2015]; root of context hierarchy 377 at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:357) 378 at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:877) 379 at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:836) 380 at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:579) 381 at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:115) 382 at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4980) 383 at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5626) 384 at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) 385 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160) 386 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 387 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 388 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 389 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1113) 390 at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1671) 391 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 392 at java.util.concurrent.FutureTask.run(FutureTask.java:262) 393 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 394 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 395 at java.lang.Thread.run(Thread.java:744)

    opened by coolworker 4
  • Dubbox服务被多次调用

    Dubbox服务被多次调用

    通过Dubbox调用一个服务时,出现服务被多次调用的问题(出现的几率很低。出现时一般是调用两次,有时会被调用三次,然后返回最后一次调用的结果) 我可以通过什么方式去调试问题的原因?

    Dubbox 版本:2.8.4 Zookeeper版本:3.4.6 standalone Ubuntu14.04 java version "1.7.0_75"

    opened by kisChang 4
  • client端调用REST服务提示HTTP 404 Not Found,protocol=

    client端调用REST服务提示HTTP 404 Not Found,protocol="dubbo"正常

    <dubbo:reference id="bidService" interface="com.alibaba.dubbo.demo.bid.BidService"/>
    <dubbo:reference id="anotherUserRestService" interface="com.alibaba.dubbo.demo.user.facade.AnotherUserRestService"/>
    

    bidService成功注入action anotherUserRestService 404,异常如下: vice.AnotherUserRestService, method: getUser, cause: HTTP 404 Not Found at com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:101) at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:227) at com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:72) at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:52) at com.alibaba.dubbo.common.bytecode.proxy1.getUser(proxy1.java) Caused by: javax.ws.rs.NotFoundException: HTTP 404 Not Found at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.handleErrorStatus(ClientInvocation.java:181) at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.extractResult(ClientInvocation.java:154) at org.jboss.resteasy.client.jaxrs.internal.proxy.extractors.BodyEntityExtractor.extractEntity(BodyEntityExtractor.java:58) at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientInvoker.invoke(ClientInvoker.java:104) at org.jboss.resteasy.client.jaxrs.internal.proxy.ClientProxy.invoke(ClientProxy.java:62) at $Proxy27.getUser(Unknown Source) at com.alibaba.dubbo.common.bytecode.Wrapper1.invokeMethod(Wrapper1.java)

    opened by jacknan 4
  • dubbo测试callback报错

    dubbo测试callback报错

    按照callback例子写的,消费端调用时报Exception in thread "main" com.alibaba.dubbo.rpc.RpcException Caused by: com.alibaba.dubbo.remoting.RemotingException: Fail to decode request due to: RpcInvocation [methodName=addListener, parameterTypes=[class java.lang.String, interface api.callback.CallbackListener], arguments=null, attachments={path=com.csc.microServe.api.callback.CallbackService, input=763, name=org.jeecg.Test, dubbo=2.8.4, version=0.0.0}] c.alibaba.com.caucho.hessian.io.SerializerFactory:528 - Hessian/Burlap: 'org.jeecg.modules.order.service.impl.CallbackListenerImpl' is an unknown class in sun.misc.Launcher$AppClassLoader@18b4aac2: 服务端报这个错。可是CallbackListenerImpl就是dubbo CallbackListener的接口实现

    opened by jinkelazzz 0
  • CVE-2020-1948在dubbox中是否存在

    CVE-2020-1948在dubbox中是否存在

    在Dubbo 中爆出了cve漏洞,请问Dubbox中是否受影响,受影响的版本有哪些呢 CVE-2020-1948对Dubbo 的影响版本为: 2.7.0 <= Dubbo Version <= 2.7.6 2.6.0 <= Dubbo Version <= 2.6.7 Dubbo 所有 2.5.x 版本(官方团队目前已不支持)

    opened by 583479389 0
  • CVE-2019-17564在dubbox中是否存在

    CVE-2019-17564在dubbox中是否存在

    在Dubbo 中爆出了cve漏洞,请问Dubbox中是否受影响,受影响的版本有哪些呢 CVE-2019-17564对Dubbo 的影响版本为: 2.7.0 <= Apache Dubbo <= 2.7.4 2.6.0 <= Apache Dubbo <= 2.6.7 Apache Dubbo = 2.5.x

    opened by Eenki 0
  • 应用停止过程rest请求报错

    应用停止过程rest请求报错

    • [x] I have searched the issues of this repository and believe that this is not a duplicate.
    • [ ] I have checked the FAQ of this repository and believe that this is not a duplicate.

    Environment

    • Dubbo version: 2.6.x
    • Operating System version: win10
    • Java version: 1.8

    Steps to reproduce this issue

    1. 使用resteasy发布rest服务时,存在高并发请求的情况下,正常停止应用过程中会产生大量找不到请求资源错误(404)

    Expected Result 136049 [2019-12-12 11:18:15]-[qtp685016598-28] 199 ERROR o.j.resteasy.resteasy_jaxrs.i18n - RESTEASY002010: Failed to execute javax.ws.rs.NotFoundException: RESTEASY003210: Could not find resource for full path: http://127.0.0.1:8081/getUID at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:114) at org.jboss.resteasy.core.registry.RootNode.match(RootNode.java:43) at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.java:48) at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:445) at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:257) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:194) at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221) at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at com.alibaba.dubbo.rpc.protocol.rest.DubboHttpServer$RestHandler.handle(DubboHttpServer.java:87) at com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet.service(DispatcherServlet.java:64) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1655) at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:215) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642) at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642) at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:155) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:123) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:108) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1340) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1242) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) at org.eclipse.jetty.server.Server.handle(Server.java:503) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683) at java.lang.Thread.run(Thread.java:745)

    Repair plan RestProtocol#doExport() { return new Runnable() { ....... public void run() { //fixbug 停止应用过程中,存在请求会产生资源未找到异常(404) // TODO due to dubbo's current architecture, // it will be called from registry protocol in the shutdown process and won't appear in logs //s.undeploy(resourceDef); } }; } DubboHttpServer#stop() { deployment.stop(); httpServer.close(); }

    Actual Result 68889 [2019-12-12 11:38:44]-[qtp1788774641-32] 37 INFO c.h.z.c.d.filter.ZeusLoggerFilter - 请求结果:{"exception":null,"result":{"data":{"uuid":471642358794940},"success":true,"errCode":null,"errMsg":null},"attachments":{},"value":{"data":{"uuid":471642358794940},"success":true,"errCode":null,"errMsg":null}} 68892 [2019-12-12 11:38:44]-[RMI TCP Connection(2)-127.0.0.1] 341 INFO o.e.jetty.server.AbstractConnector - Stopped ServerConnector@56c73551{HTTP/1.1,[http/1.1]}{0.0.0.0:8081} 68893 [2019-12-12 11:38:44]-[RMI TCP Connection(2)-127.0.0.1] 167 INFO org.eclipse.jetty.server.session - node0 Stopped scavenging 68896 [2019-12-12 11:38:44]-[RMI TCP Connection(2)-127.0.0.1] 1040 INFO o.e.j.server.handler.ContextHandler - Stopped o.s.b.w.e.j.JettyEmbeddedWebAppContext@3ea4712b{application,/,[file:///C:/Users/liangjf/AppData/Local/Temp/jetty-docbase.2227552812101003171.8081/, jar:file:/D:/my/io/springfox/springfox-swagger-ui/2.7.0/springfox-swagger-ui-2.7.0.jar!/META-INF/resources],UNAVAILABLE}

    opened by liangjf85 0
Opis Closure - a library that aims to overcome PHP's limitations regarding closure serialization

Opis Closure is a library that aims to overcome PHP's limitations regarding closure serialization by providing a wrapper that will make all closures serializable.

Opis 2.4k Dec 18, 2022
JSON <=> PHP8+ objects serialization / deserialization library

A simple library for JSON to PHP Objects conversions Often times, we interact with an API, or data source that returns JSON. PHP only offers the possi

Square 90 Dec 20, 2022
This project backports features found in the latest PHP versions and provides compatibility layers for some extensions and functions

This project backports features found in the latest PHP versions and provides compatibility layers for some extensions and functions. It is intended to be used when portability across PHP versions and extensions is desired.

Symfony 2.2k Dec 29, 2022
Tars is a high-performance RPC framework based on name service and Tars protocol, also integrated administration platform, and implemented hosting-service via flexible schedule.

TARS - A Linux Foundation Project TARS Foundation Official Website TARS Project Official Website WeChat Group: TARS01 WeChat Offical Account: TarsClou

THE TARS FOUNDATION PROJECTS 9.6k Jan 1, 2023
Laravel Plans is a package for SaaS apps that need management over plans, features, subscriptions, events for plans or limited, countable features.

Laravel Plans Laravel Plans is a package for SaaS apps that need management over plans, features, subscriptions, events for plans or limited, countabl

ángel 2 Oct 2, 2022
Adds a "spam protection" field to SilverStripe userforms using Cloudflare's Turnstile service.

Turnstile for Silverstripe Adds a "spam protection" field to SilverStripe userforms using Cloudflare's Turnstile service. Maintainer Contact Ed Chipma

Webbuilders Group 3 Dec 15, 2022
Michael Pratt 307 Dec 23, 2022
A Laravel Wrapper for the Binance API. Now easily connect and consume the Binance Public & Private API in your Laravel apps without any hassle.

This package provides a Laravel Wrapper for the Binance API and allows you to easily communicate with it. Important Note This package is in early deve

Moinuddin S. Khaja 7 Dec 7, 2022
This package is considered feature-complete, and is now in security-only maintenance mode

laminas-soap This package is considered feature-complete, and is now in security-only maintenance mode, following a decision by the Technical Steering

Laminas Project 46 Dec 18, 2022
PracticeCore at the time created for DarkneesNetwork, and now i publish

Practice PracticeCore for PocketMine-MP 4.0.0 Description This is a beta version, It is very likely a drop in TPS or performance and clearly errors an

Claudio T. 4 Jul 24, 2022
All PHP functions, rewritten to throw exceptions instead of returning false, now for php8

A set of core PHP functions rewritten to throw exceptions instead of returning false when an error is encountered.

TheCodingMachine 106 Nov 21, 2022
now you can save MentionedMessage in UI

General now you can save MentionedMessage in UI Example: You Chat Hi @MulqiGaming @Friends it will be save Message later to MulqiGaming and Friends Co

MulqiGaming64 3 Aug 9, 2022
A now playing screen for the Raspberry Pi using the Last.fm API.

raspberry-pi-now-playing A now playing screen for the Raspberry Pi using the Last.fm API. This project is detailed, with photos of how I used it with

null 44 Dec 17, 2022
Helper script to aid upgrading magento 2 websites by detecting overrides. Now supports third party module detections

ampersand-magento2-upgrade-patch-helper Helper scripts to aid upgrading magento 2 websites, or when upgrading a magento module This tool looks for fil

Ampersand 242 Dec 18, 2022
This is Laravel Framework. Referral User Management System, Payment using Coinpayment.net. etc

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Worlddev5007 12 Aug 26, 2022
A Simple MVC PHP Framework, integrated with lot of features such as Session, Cookies, Migrations, Database, Factories, Seeding, Bootstrap and Tailwind CSS

Navite A Simple MVC PHP Framework, integrated with lot of features such as Session, Cookies, Migrations, Database, Factories, Seeding, Bootstrap and T

Celionatti 2 Aug 22, 2022
Phalcon Builder - is a packaging system that make it easy and quick to build Phalcon packages such as rpms, debs, etc. Phalcon's distribution that hosted at PackageCloud.

Phalcon Builder - is a packaging system that make it easy and quick to build Phalcon packages such as rpms, debs, etc. Phalcon's distribution that hos

The Phalcon PHP Framework 26 Oct 7, 2022
A class to help convert bytes into other units (kb, mb, etc).

A class to help convert bytes into other units (kb, mb, etc). This package can be used to convert int|float values from bytes to KB, MB and GB as well

Ryan Chandler 12 Mar 15, 2022
The simplest way to create a dynamic sitemap for your self-coded website which you have made by using PHP/HTML/CSS/Js etc... Scripts.

Sitemap_index.xml The simplest way to create a dynamic sitemap for your self-coded website which you have made by using PHP/HTML/CSS/Js etc... Scripts

Tanish Raj 1 Oct 16, 2021