当前位置: 首页 > 知识库问答 >
问题:

Hystrix Javanica:调用始终从回退方法返回结果。(没有spring的java web应用程序)

洪宏硕
2023-03-14

我正试图将Hystrix javanica集成到我现有的java EJB web应用程序中,在运行它时面临两个问题。

>

  • 当我尝试调用以下服务时,它总是从回退方法返回响应,我看到回退方法中的Throwable对象有com.netflix.hystrix.exception.HystrixTimeoutExc0019异常。

    每次触发此服务时,都会多次调用HystrixComad和回退方法约50次。

    有人能给我一些建议吗?我是否缺少任何配置?

    我包括以下库在我的项目

    我已经设置我的方面文件如下:

    <aspectj>
     <weaver options="-verbose -showWeaveInfo"></weaver>
     <aspects>
        <aspect name="com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect"/>
     </aspects>
    </aspectj>
    

    这是我在META-INF/config.properties中的config.properties文件

    hystrix.command.default.execution.timeout.enabled=false
    

    这是我的rest服务文件

    @Path("/hystrix")
    public class HystrixService {
    
     @GET
     @Path("clusterName")
     @Produces({ MediaType.APPLICATION_JSON })
     public Response getClusterName(@QueryParam("id") int id) {
        ClusterCmdBean clusterCmdBean = new ClusterCmdBean();
        String result = clusterCmdBean.getClusterNameForId(id);
        return Response.ok(result).build();
     }
    }
    

    这是我的bean类

    public class ClusterCmdBean {
    
     @HystrixCommand(groupKey = "ClusterCmdBeanGroup", commandKey = "getClusterNameForId", fallbackMethod = "defaultClusterName")
     public String getClusterNameForId(int id) {
        if (id > 0) {
            return "cluster"+id;
        } else {
            throw new RuntimeException("command failed");
        }
     }
    
     public String defaultClusterName(int id, Throwable e) {
        return "No cluster - returned from fallback:" + e.getMessage();
     }
    }
    

    谢谢你的帮助。

  • 共有1个答案

    杨超
    2023-03-14

    如果要确保设置的是特性,可以在回路注释本身中显式设置:

    @HystrixCommand(commandProperties = {
        @HystrixProperty(name = "execution.timeout.enabled", value = "false")
    })
    

    不过,我只推荐用于调试目的。

    我突然想到的是Javanica使用了AlooJAOP,我以前从未见过它与new MyBean()一起工作。我总是必须使用@autowmed与Spring或类似的来允许代理。不过,这对我来说很可能只是一件新鲜事。如果您在getClusterNameForId中设置断点,您可以在堆栈跟踪中看到它是通过反射调用的(应该是AFAIK)吗?

    注意:您可以删除commandKey,因为这将默认为方法名称。就我个人而言,我也会删除groupKey,并让它默认为类名。

     类似资料:
    • 问题内容: 我正在使用Spring的JdbcTemplate和StoredProcedure类。我无法让存储过程类为我工作。 我在oracle数据库上有一个存储过程。它的签名是 哪里 我创建了以下存储过程类以从oracle过程获取信息 我在我的一个DAO类中的一种方法中调用此方法 但是,地图的大小始终为0,因此没有任何结果。我知道数据库中有符合我输入条件的行。我也有用于与oracle存储的proc

    • 问题内容: 我在自己的类中拥有所有异步调用,因此我不想将aync’ly设置为全局变量。为此,我想从我的asunc postProcess方法返回对象,例如字符串。 能做到吗? 下面是我类的一般结构,例如,我想从onPostExecute()返回一个字符串。我看到在其他地方提到了委托,但这似乎很混乱,确定有办法为类或方法提供返回类型吗? 问题答案: 像下面这样 和听众课 你可以这样打电话

    • 本文向大家介绍ionic3双击返回退出应用的方法,包括了ionic3双击返回退出应用的方法的使用技巧和注意事项,需要的朋友参考一下 ionic3 做双击退出应用的时候按照网上大神的来,从中遇到了一些问题,用this.app.getRootNav().push(MyPage);跳转的页面无法返回,this.app.getActiveNav().pop();这个方法在新的版本中已近被移除了,最后使用另

    • 我尝试使用firebase的isNewUser方法,但它总是返回false。据我所知,它只适用于通过Firebase控制台创建的帐户,这正是我的情况。只要用户点击“连接”并且他的信息正确,该函数就会被调用。 谢谢你的帮助!

    • 我已经配置了一个自定义过滤器,它为除登录之外的每个URL授予spring权限: 和一个spring配置,该配置使用该权限保护所有请求(但不包括登录): 但是,除了登录之外,每个请求都会得到HTTP 403禁止。 我已经调试并确保过滤器中的代码确实被触发。 有什么问题吗? 编辑-当将Spring Security日志放入调试时,我得到以下堆栈跟踪: