Ray

Results 167 comments of Ray

也可以看看error日志里有没有其他的异常,比如关键字“rebuild error”之类与建立连接相关的异常

可以,微博内部也有一些strom的工程在使用motan,如果完全没有使用spring可以使用api方式调用motan服务,可以参考[api方式调用motan](https://github.com/weibocom/motan/blob/master/motan-demo/motan-demo-client/src/main/java/com/weibo/motan/demo/client/MotanApiClientDemo.java)、[api方式提供motan服务](https://github.com/weibocom/motan/blob/master/motan-demo/motan-demo-server/src/main/java/com/weibo/motan/demo/server/MotanApiExportDemo.java)。不过建议通过spring配置方式使用motan。 另外需要注意,使用motan的项目打成一个独立运行jar包时,需要对META-INF/services/下motan相关的SPI扩展文件使用追加模式打包。如果使用了spring方式,则META-INF/下的spring.schemas、spring.handler也需要使用追加模式。 样例如下: ```xml org.apache.maven.plugins maven-shade-plugin 2.3 package shade META-INF/spring.schemas META-INF/spring.handlers META-INF/services/com.weibo.api.motan.registry.Registry META-INF/services/com.weibo.api.motan.registry.RegistryFactory META-INF/services/com.weibo.api.motan.rpc.Protocol META-INF/services/com.weibo.api.motan.cluster.LoadBalance META-INF/services/com.weibo.api.motan.cluster.Cluster META-INF/services/com.weibo.api.motan.codec.Codec ```

可以通过[filter的SPI扩展]( https://github.com/weibocom/motan/wiki/zh_developguide#%E6%89%A9%E5%B1%95motan%E7%9A%84filter)来处理,使用时在service中配置filter='your_filter_spi_name'来使扩展filter生效。可以参考`com.weibo.api.motan.filter`包下的filter

motan中服务的注册和发现是以group+service进行区分的,一个group下可以有多个service,一般group用来区分不同IDC、核心业务与非核心业、预览环境等 application代表提供或使用service的业务方,例如不同的部门,可以基于application做来源验证等AC策略 你上面提到的profile,例如 qa、dev这些,我觉得至少是需要在group上做区分的,如果能跟生产环境的注册中心隔离是最好的

@ywf4026 module的设计作用是对服务进行分类导出。一个module包含多个业务相关的service,同一个rpc项目启动时可以根据module导出不同的服务组合。 module这个功能与服务导出的实现依赖比较严重,在微博内部使用的场景也不多,因此在开源版中并没有针对module提供特殊的能力,可以当作保留的关键字吧。

后续版本会考虑给`MotanErrorMsg`这个类添加无参构造函数。 这个问题也可以考虑通过在kryo注册对应的serializer来解决。

第一种报错表示请求超时,可以确认一下超时时间`requestTimeout`是否设置过小,或者server端是否处理请求耗时较高。 第二种报错表示触发了连续错误熔断,referers_size=1表示当前只有一个server节点,连续请求失败10次后触发了熔断机制,所以没有可用节点。 有几个压测的建议可以参考: 1、压测前先重复请求一定次数进行预热。 2、如果压测client端调用能力,可以适当加大server节点数量,或者调大client端maxClientConnection参数。 3、如果测试server最大承载能力,可以考虑用多个相同client同时压测。 4、可以考虑减少线程数,增加循环请求次数。比如20线程每线程循环1W次,能更好的测试出整体吞吐能力。如果对单机瞬时并发能力要求较高,单节点的链接池就会成为瓶颈,可以考虑增加server节点数量或者加大client链接数量

requesttimeout设置30s还能超时,应该是有其他的问题。可以排查一下网络链路是否有问题,单次请求能调通吗?

如果serve节点较少的情况下,可以在**client端**的**protocol**配置里,把maxClientConnection设置大一些试试,比如50。设置是否生效可以netstat看一下与server的链接数是否超过默认值10 如果并发较高,需要链接数较大的场景,需要经过充分预热,避免压测瞬间建立链接等耗时操作,压测方式也可以参考项目中自带的benchmark模块。