关于rop服务方法超时重试建议

kelloKitty 2012-05-29
1.如何在rop框架指定客户端调用服务方法的超时时间设置呢?,如果是cxf指定connectionTimeout熟悉就可以了。
2.调用服务方法超时了rop又该如何处理呢?
谢谢。
stamen 2012-05-29
你这个建议太好了,我拟采用如下方式设计:
在@ApiMethod这个注解类中添加一些属性,对服务方法进行额外的控制,原来只有一个value()的属性:

package com.rop.annotation;


import java.lang.annotation.*;

/**
 * <pre>
 *     使用该注解对服务方法进行标注,这些方法必须是Spring的Service:既打了@Service的注解。
 * </pre>
 *
 * @author 陈雄华
 * @version 1.0
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ApiMethod {
    /**
     * 服务的方法名,即由method参数指定的服务方法名
     * @return
     */
    String value();

    /**
     * 所属的服务分组,默认为"DEFAULT"
     * @return
     */
    String group() default DEFAULT_GROUP;

    /**
     * 标签,可以打上多个标签
     * @return
     */
    String[] tags() default "";

    /**
     * 服务的中文名称
     * @return
     */
    String title() default "";

    /**
     * 访问过期时间,单位为位,即大于这个过期时间的链接会结束并返回错误报文,如果
     * 为0或负数则表示不进行过期限制
     * @return
     */
    int timeout() default 0;

    /**
     * 该方法所对应的版本号,对应version请求参数的值,版本为空,表示不进行版本限定
     * @return
     */
    String version() default "";

    /**
     * 服务方法需要需求会话检查,默认为true
     * @return
     */
    boolean needInSession() default true;

    /**
     * 是否忽略签名检查
     * @return
     */
    boolean ignoreSign() default false;

    /**
     * 默认的组
     */
    public static final String DEFAULT_GROUP ="DEFAULT";
}
kelloKitty 2012-05-29
恩,我开始也是这样想的,在apimethod注解加上timeout属性值。
但是有个问题,如果才能拿到服务方法的返回时间和服务方法上的timeout注解值做比较呢?实现上有好的方式吗?
stamen 2012-05-29
kelloKitty 写道
恩,我开始也是这样想的,在apimethod注解加上timeout属性值。
但是有个问题,如果才能拿到服务方法的返回时间和服务方法上的timeout注解值做比较呢?实现上有好的方式吗?


Rop应该有一个过期判断的背景线程,在请求到达后记录时间并放到一个列表中管理,然后定期检查有没有过期。当请求返回响应后,这条过期时间管理的记录从列表中清除。

且待我实现出来,应该不难。

其实TestNG的@Test注解也有一个timeout的属性,和我们这边的是完全一样的,实现前我也要先去读读TestNG的源码。
kelloKitty 2012-05-29
lz太强大了,我现在也在看cxf源码的超时机制。想看看他们是如何实现的。
期待lz早日实现,也好学习一下。
小树鹿鸣 2012-05-29
LZ 确实强大, 目前正期待LZ快点完成, 我就可以搬到项目里去了.
Global site tag (gtag.js) - Google Analytics