Open morehair opened 1 month ago
我在TestClient.java里用for循环创建10个以上线程同时向服务器发送请求时会抛出几个异常,似乎是客户端的请求得到了空的返回结果 尤其是后面的线程在执行到guavaRetry.java的
.retryIfResult(response -> Objects.equals(response.getCode(), 500))
这行代码时会抛出异常 java.lang.NullPointerException: Cannot invoke "part1.common.Message.RpcResponse.getCode()" because "response" is null 然后retryer不会进行下一次重试了,控制台输出也只有RetryListener: 第1次调用 没有第二次和第三次 我把代码改成
.retryIfResult(response -> response == null || Objects.equals(response.getCode(), 500))
之后才能正常进行下一次重试 请问这是代码的问题还是我运行方式有问题
public class TestClient { public static void main(String[] args) throws InterruptedException { ClientProxy clientProxy=new ClientProxy(); UserService proxy=clientProxy.getProxy(UserService.class); for(int i = 0; i < 15; i++) { Integer i1 = i; new Thread(()->{ try{ User user = proxy.getUserByUserId(i1); System.out.println("从服务端得到的user="+user.toString()); Integer id = proxy.insertUserId(User.builder().id(i1).userName("User" + i1.toString()).sex(true).build()); System.out.println("向服务端插入user的id"+id); } catch (NullPointerException e){ System.out.println("user为空"); e.printStackTrace(); } }).start(); } } // User u=User.builder().id(100).userName("wxx").sex(true).build(); // Integer id = proxy.insertUserId(u); // System.out.println("向服务端插入user的id"+id); }
您好!很高兴你能发现这里存在的问题。在经过排查后,发现这里的问题在于当 并发请求之后,Server端的限流器生效,限流返回Fail Response ,但在解码器decoder中对fail response的解码不正确,需要添加解码逻辑。这个问题我将于今晚尽快修复
json序列化的生成dataType的部分应该加一个data为空的判断
我在TestClient.java里用for循环创建10个以上线程同时向服务器发送请求时会抛出几个异常,似乎是客户端的请求得到了空的返回结果 尤其是后面的线程在执行到guavaRetry.java的
这行代码时会抛出异常 java.lang.NullPointerException: Cannot invoke "part1.common.Message.RpcResponse.getCode()" because "response" is null 然后retryer不会进行下一次重试了,控制台输出也只有RetryListener: 第1次调用 没有第二次和第三次 我把代码改成
之后才能正常进行下一次重试 请问这是代码的问题还是我运行方式有问题