Stay hungry, Stay foolish

0%

dubbo consumer failed invoke method

在开发环境进行 Dubbo 服务的调试时,报了下面这个错误

Failed to invoke the method rank in the service rank.client.service.RankEngine. Tried 3 times of the providers [192.168.4.170:8090] (1/1) from the registry 192.168.2.198:2181 on the consumer 10.131.108.4 using the dubbo version 2.7.6.

看来是 Consumer 在调用 Provider 的方法时出了问题

尽管看起来能找到正确的 Provider ,还是优先排查一下注册中心

  • 使用zkCli连接ZooKeeper

    1
    2
    $ ./zkCli.sh
    Welcome to ZooKeeper!
  • 分别查看 providers 和 consumers

    • providers

      1
      [zk: localhost:2181(CONNECTED) 5] ls /dubbo/rank.client.service.RankEngine/providers
    • consumers

      1
      [zk: localhost:2181(CONNECTED) 6] ls /dubbo/rank.client.service.RankEngine/consumers

主要看一下 Consumer 有没有注册上, 以及相应的信息(group、version、端口号)与 Provider 是否一致——发现没有问题

看来只能在 Consumer 那台机器上连接 Dubbo 调试一下了

  • 连接到 Dubbo

    1
    2
    3
    4
    5
    # telnet 192.168.4.17 8090
    Trying 192.168.4.170...
    Connected to 192.168.4.170.
    Escape character is '^]'.
    dubbo>
  • 查看所有 Provider

    1
    2
    3
    dubbo>ls
    PROVIDER:
    search-rank/rank.client.service.RankEngine:1.0.0
  • 将要调试的类设为 default

    1
    2
    3
    dubbo>cd RankEngine
    Used the RankEngine as default.
    You can cancel default service by command: cd /
  1. 先模拟一下正式的参数调用

    1
    dubbo>invoke rank([{"id":21139999,"type":1},{"id":21435079,"type":1}],{"biz":"mdd_v3"})

    失败了!

  2. 再试一下空参数

    1
    dubbo>invoke rank()

    这次报错不一样,提示没有这个方法——这是对的,该类中并没有无参数的rank方法
    看来是方法执行出问题了

  3. 最后试一下空值参数

    1
    2
    3
    dubbo>invoke rank([],{})
    Use default service RankEngine.
    result: {"cost":0,"pvid":"b3c60767-85a9-4927-8bcb-abdf945f4b3b-1636106181827","result":{},"status":0}

    这个没有问题。说明是参数出了问题!

接下来把这方法的两个参数与相对应的包排查一下

发现了问题:两个包的版本不一致!

更新了版本后,发布就OK了

据说打赏我的人,代码没有BUG