您现在的位置是:网站首页> 新闻快讯> 软件使用 新闻快讯

msxml 6 0(MSXML 6.0)

小玉2023-07-05软件使用 247人已围观

简介Dubbo超时的思考在dubbo的provider和Consumer的配置文件中,如果都配置了timeout的超时时间,dubbo默认以cons

msxml 6 0(MSXML 6.0)

最后更新:2023-07-05 00:44:06

推荐指数

Dubbo超时的思考在dubbo的provider和Consumer的配置文件中,如果都配置了timeout的超时时间,dubbo默认以consumer中配置的时间为准provider.xml的配置:<dubbo:servicetimeout="4000"retries="0"interface="com.dingding.tms.bms.service.BillingZfbCodOrderService"ref="billingZfbCodOrderService"registry="globalRegistry"/>conusmer中的配置:<dubbo:referenceid="billingInterService"interface="com.dingding.tms.bms.service.BillingInterService"protocol="dubbo"check="false"registry="globalRegistry"timeout="3000"/>最后这个service在调用时的超时时间就是3秒。另外,1,consumer会在超过3秒时得到一个调用超时的异常。2,provider中代码的执行不会因为超时而中断,在执行完毕后,会得到一个dubbo的警告当Consumer对一个服务的并发调用到上限后,新调用会Wait直到超时。在方法上配置(dubbo:method)则并发限制针对方法,在接口上配置(dubbo:service),则并发限制针对服务。Provider上配置合理的Provider端属性比如:<dubbo:protocolthreads="200"/><dubbo:serviceinterface="com.alibaba.hello.api.HelloService"version="1.0.0"ref="helloService"executes="200"><dubbo:methodname="findAllPerson"executes="50"/></dubbo:service>Provider上可以配置的Provider端属性有:threads,服务线程池大小executes,一个服务提供者并行执行请求上限,即当Provider对一个服务的并发调用到上限后,新调用会Wait(Consumer可能到超时)。在方法上配置(dubbo:method)则并发限制针对方法,在接口上配置(dubbo:service),则并发限制针对服务。以上为网上的定义,在实际使用中当服务的消费方调用服务的提供方超时时,会抛出如下异常:Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2016-07-20 16:27:34.873, end time: 2016-07-20 16:27:39.895, client elapsed: 0 ms, server elapsed: 5022 ms, timeout: 5000 ms, request: Request [id=438870, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=querySeatByCode, parameterTypes=[class java.lang.String, class java.lang.String], arguments=[×××5788, A1], p_w_uploads={input=356, path网上通常的解决办法是调大超时时间,但是也可能是因为代码本身有潜在问题而造成dubbo超时。比如:在dubbo消费方,调用了dubbo的提供方,此时事务是分步的,但如果自己的service方法中会用到一张表并去做update操作导致产生了行锁时,如果恰巧你又在之后调用了另一个会操作此表的dubbo服务,那么问题就产生了,你会在调dubbo服务的时候发生如上的超时异常,就是因为用springaop声明式事务,在你service没有执行完时产生的行锁并没有释放,而你又在service里放入了需要操作此表的dubbo服务,这样当数据库的死锁还没有抛异常的时候,dubbo就已经抛异常了,因此这个超时异常其实坑很深,需要根据实际代码进行具体分析。什么是LINQ?LINQ(LanguageIntegratedQuery)是在C#和VB.NET中统一的查询语法,用于从不同的来源和格式中检索数据。它集成在C#或VB中,从而消除了编程语言和数据库之间的不匹配,并为不同类型的数据源提供了一个单一的查询界面。例如,SQL是一种结构化查询语言,用于保存和检索数据库中的数据。同样,LINQ是一种在C#和VB.NET中构建的结构化查询语法,用于从不同类型的数据源中检索数据,如集合、ADO.NetDataSet、XMLDocs、Web服务和MSSQLServer等数据库。LINQ的魅力在于可以用非常清晰的语义化语句,以面向对象的编程方式,构建查询语句,获取得到的是结果的对象。SQL语句写起来很蛋疼,还容易出错,sql注入式漏洞屡见不鲜。LINQ会帮你把查询条件,翻译为对等的sql语句,执行查询,返回结果,映射为对象。你只用跟LINQ打交道。这也是.Net平台一个领先的地方。它比Java这些平台更强大。

很赞哦! (0)

文章评论

来说两句吧...

验证码: