grpc(二)记一次grpc debug--io.grpc.StatusRuntimeException: UNKNOWN
1、起初是dingding一直报错:
instance:服务器名
err:GrpcClient#placeOrder: io.grpc.StatusRuntimeException: UNKNOWN
2、定位错误位置(找到问题,复现问题)
上面标红的代码是调用dingding,所以可以确定是调用grpc时,grpc内部报错,所以返回status message为 UNKNOWN。
public Object placeOrder(Integer uid, 其他参数) {
PlaceOrderRequest request = PlaceOrderRequest.newBuilder().setUserid(uid).build();
GrpcReply response;
try {
response = tradeBlockingStub.placeOrder(request);
UtilFunctions.log.info("GrpcClient#placeOrder rusult: code:{}, data:{}",
response.getCode(), response.getData());
return response;
} catch (StatusRuntimeException e) {
UtilFunctions.log.error("GrpcClient#placeOrder: msg:{}, exception:{}", e.toString(), e);
UtilFunctions.reportError("GrpcClient#placeOrder: " + e.toString(), e);
return null;
}
}
查看linux上的日志,发现controller接收的数据price为NaN。

所以,我在本地给price参数传NaN进行测试,果然出现同样的错误。grpc报错,原因是给Double类型的参数传了NaN,打印信息:
四月 10, 2019 1:20:48 下午 io.grpc.internal.SerializingExecutor run
严重: Exception while executing runnable io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed@2d37b2d0
java.lang.NumberFormatException
3、解决
在controller对Double类型的数据进行判断。
Double obj;
obj.isNaN();
4、测试前台传NaN数据
4.1、新建一个springboot项目(版本2.1.3)
4.2、application.properties
server.port=8090
server.servlet.context-path=/
4.3、IndexController.java
@RestController
public class IndexController { @RequestMapping("/index")
public Object demo1(Double price, Integer num) {
// 前端给price传NaN是可以的
// ==== price: NaN ====
if (price.isNaN()) {
System.out.println("---- price.isNaN ----");
}
System.out.println("==== price: " + price + " ====");
System.out.println(price.getClass().getName()); System.out.println("==== num: " + num + " ====");
System.out.println(num.getClass().getName()); Map<String, Object> result = new HashMap<>();
result.put("price", price);
result.put("num", num); return result;
}
}
4.4、使用firefox测试

grpc(二)记一次grpc debug--io.grpc.StatusRuntimeException: UNKNOWN的更多相关文章
- Caused by: java.lang.ClassNotFoundException: Didn't find class "io.grpc.helloworldexample.HelloworldActivity" on path: DexPathList
FAQ: Android app 编译好后安装到手机,运行时闪退,报如下错误: java.lang.RuntimeException: Unable to instantiate activity ...
- No versions available for io.grpc:grpc-core:jar:[1.13.1] within specified range
No versions available for i{0}:[1.13.1] within specified range maven打包的时候报错是由于同一个jar包有多个版本导致的版本冲突 解决 ...
- 记angular和asp.net使用grpc进行通信
AspNetCore配置grpc服务端 新建一个Demo项目: GrpcStartup, 目录结构如下图: GrpcStartup.GrpcServices需要安装下面的依赖 <PackageR ...
- 初识google多语言通信框架gRPC系列(四)C++中使用gRPC
我的这几篇文章都是使用gRPC的example,不是直接编译example,而是新建一个项目,从添加依赖,编译example代码,执行example.这样做可以为我们创建自己的项目提供借鉴.如果对gR ...
- 初识google多语言通信框架gRPC系列(三)C#中使用gRPC
我的这几篇文章都是使用gRPC的example,不是直接编译example,而是新建一个项目,从添加依赖,编译example代码,执行example.这样做可以为我们创建自己的项目提供借鉴.如果对gR ...
- Spring Boot 2+gRPC 学习系列1:搭建Spring Boot 2+gRPC本地项目
Spring Boot 2+gRPC 学习系列1:搭建Spring Boot 2+gRPC本地项目 https://blog.csdn.net/alinyua/article/details/8303 ...
- grpc(3):使用 golang 开发 grpc 服务端和client
1,关于grpc-go golang 能够能够做grpc的服务端和client. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://g ...
- Java (二)基于Eclipse配置Commons IO的环境
上一篇:Java (一)下载APACHE Commons IO 一.新建一个Java Project 二.使用鼠标右键点击工程,选择New > Folder 三.在Folder name输入文件 ...
- Linux非阻塞IO(二)网络编程中非阻塞IO与IO复用模型结合
上文描述了最简易的非阻塞IO,采用的是轮询的方式,这节我们使用IO复用模型. 阻塞IO 过去我们使用IO复用与阻塞IO结合的时候,IO复用模型起到的作用是并发监听多个fd. 以简单的回射服务器 ...
随机推荐
- word简单优化--提高效率
1.文件 ---选项---校对(去掉下面这些项) 2.点击自动更正,去掉如下 3.文件--选项--保存
- Spring MVC原理及配置详解
Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制 ...
- [js]js中事件的3要素
js中事件的3要素 事件源 事件 事件处理程序 <!DOCTYPE html> <html> <head lang="en"> <meta ...
- 取数游戏II
传送门 #include <bits/stdc++.h> using namespace std; #define ll long long #define re register #de ...
- node (02 CommonJs 和 Nodejs 中自定义模块)顺便讲讲module.exports和exports的区别 dependencies 与 devDependencies 之间的区别
CommonJS 规范的提出,主要是为了弥补当前 JavaScript 没有标准的缺陷.它的终极目标就是:提供一个类似 Python,Ruby 和 Java 语言的标准库,而不只是停留在小脚本程序的阶 ...
- 四、latex字体字号设置
latex的思想是格式与内容的分离,所以不建议在文中使用大量命令,而是定义一个新的命令
- linux以16进制查看文件
vim 先用vim -b data 以2进制打开文件,然后用xxd工具转化,在vim的命令行模式下: :%!xxd --将当前文本转化为16进制格式 :%!xxd -r --将16 ...
- spring boot 配置多数据源
https://www.jianshu.com/p/b2e53a2521fc
- Java IO--NIO(一)
一.基本概念描述 1.1 I/O简介 I/O即输入输出,是计算机与外界世界的一个接口.IO操作的实际主题是操作系统.在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通 ...
- Flask最强攻略 - 跟DragonFire学Flask - 第十五篇 Flask-Script
其实本章就是为下一章做的铺垫啦,但是也要认真学习哦 Flask-Script 从字面意思上来看就是 Flask 的脚本 是的,熟悉Django的同学是否还记得Django的启动命令呢? python ...