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的更多相关文章

  1. 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 ...

  2. 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包有多个版本导致的版本冲突 解决 ...

  3. 记angular和asp.net使用grpc进行通信

    AspNetCore配置grpc服务端 新建一个Demo项目: GrpcStartup, 目录结构如下图: GrpcStartup.GrpcServices需要安装下面的依赖 <PackageR ...

  4. 初识google多语言通信框架gRPC系列(四)C++中使用gRPC

    我的这几篇文章都是使用gRPC的example,不是直接编译example,而是新建一个项目,从添加依赖,编译example代码,执行example.这样做可以为我们创建自己的项目提供借鉴.如果对gR ...

  5. 初识google多语言通信框架gRPC系列(三)C#中使用gRPC

    我的这几篇文章都是使用gRPC的example,不是直接编译example,而是新建一个项目,从添加依赖,编译example代码,执行example.这样做可以为我们创建自己的项目提供借鉴.如果对gR ...

  6. 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 ...

  7. grpc(3):使用 golang 开发 grpc 服务端和client

    1,关于grpc-go golang 能够能够做grpc的服务端和client. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://g ...

  8. Java (二)基于Eclipse配置Commons IO的环境

    上一篇:Java (一)下载APACHE Commons IO 一.新建一个Java Project 二.使用鼠标右键点击工程,选择New > Folder 三.在Folder name输入文件 ...

  9. Linux非阻塞IO(二)网络编程中非阻塞IO与IO复用模型结合

    上文描述了最简易的非阻塞IO,采用的是轮询的方式,这节我们使用IO复用模型.   阻塞IO   过去我们使用IO复用与阻塞IO结合的时候,IO复用模型起到的作用是并发监听多个fd. 以简单的回射服务器 ...

随机推荐

  1. python摸爬滚打之day26----网络编程之socket

    1.网络通信原理 互联网的本质就是一系列的网络协议, 统称为互联网协议. 互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准. 互联网协议按照功能不同分为 ...

  2. 使用hashlib进行登录校验

    注册登录和密码验证 用户注册时,文件中保存用户名,和密码的密文 登录时,密码与文件中的密文进行比较,如果相同就同意登录 import hashlib # 导入模块 def md5(username,p ...

  3. Python tesserocr模块使用示例

    操作系统:Win10 1709  X64 python版本:3.6.5 依赖模块:PIL.tesserocr. 需要说明的是,在windows系统上PowerShell通过PIP3 install t ...

  4. 彻底解决(Microsoft Visual C++ 14.0 is required)的步骤123

    之前要用协程gevent,安装pip install gevent包时遇到Microsoft Visual C++ 14.0 is required的报错提示,各种下载没有解决很头疼, 前两天安装sc ...

  5. DataCommand和DataAdapter

    SqlDataReader 高效,功能弱,只读访问SqlDataAdapter 强大,要求资源也大一点 SqlDataReader 只能在保持跟数据库连接的状态下才可以读取... SqlDataAda ...

  6. DataGridView 访问任意行不崩溃

    int index= this.dataGridView1.rows.Add(); 先执行这行代码,然后访问任意行,不崩溃, 赋值不存在的行,只是不显示,或者无值. 什么原理呢? 一些其他 priva ...

  7. Linux:command not found

    最近老是遇到command not found 这个问题,然后就上网查到什么文件底下export什么变量啊.后来次数多了,发现不对劲.后来上网查了一下,原来切换到root用户要使用su -,而不是su ...

  8. Python RabbitMQ RPC实现

    远程调用方法:R(remote)  P(procedure)  C(call) 为了说明如何使用RPC服务,我们将创建一个简单的客户端类. 它将公开一个名为call的方法,它发送一个RPC请求和块,直 ...

  9. 01:云计算三种服务模式SaaS、PaaS和IaaS

    1.1 云计算 1.什么是云计算 1. 云计算服务是指将大量用网络连接的计算资源统一管理和调度,构成一个计算资源池向用户按需服务. 2. 用户通过网络以按需.易扩展的方式获得所需资源和服务(资源包括网 ...

  10. [C++ Primer Plus] 第7章、函数(二)课后习题

    一.复习题 6.为什么不对基本数据类型的函数参数使用const? 8.编写一个函数,将字符串中所有c1替换成c2,并返回替换次数. #include<iostream> using nam ...