Dapr 运用之 Java gRPC 调用篇
JAVA GRPC 服务与调用
安装协议编译器
下载对应的版本编译器,并把路径加入到环境变量中,执行以下命令生成代码
protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
-I
表示源码所在文件夹位置,--java_out
表示输出路径,空格后表示具体的 proto 文件位置,以下为示例命令protoc -I=C:\Users\JR\DaprDemos\java\examples\src\main\protos\examples --java_out=C:\Users\JR\DaprDemos\java\examples\src\main\java C:\Users\JR\DaprDemos\java\examples\src\main\protos\examples\helloworld.proto
启动 Dapr gRPC 服务端
dapr run --app-id hellogrpc --app-port 5000 --protocol grpc -- mvn exec:java -pl=examples -Dexec.mainClass=server.HelloWorldService -Dexec.args="-p 5000"
服务端主要实现说明
- 通过 Java SDK(实际此 SDK 可通过 protoc 自己生成,完成没有必要引用官方给的 SDK) 实现 dapr 对 gRPC 的通讯封装
- 服务端 proto 文件为 daprclient.proto ,鉴于语言之间的不同,名字看上去有点奇怪。(比如:以 client 为后缀,实际是服务端)
- 如果使用 Java SDK 则需要 Override
onInvoke()
函数,该函数为 Dapr gRPC 调用封装。该函数提供两个签名InvokeEnvelope
和StreamObserver<Any>
InvokeEnvelope
用于解析 gRPC 请求函数StreamObserver<Any>
用于疯转 gRPC 应答
- helloworld.proto
- 定义了一个 gRPC 函数
Say
- 定义了函数签名
SayRequest
- 定义了函数返回类型
SayResponse
- 根据步骤1提供的 cmd 命令生成代码以在
onInvoke
函数中调用
- 定义了一个 gRPC 函数
启动 Dapr gRPC 客户端
dapr run --protocol grpc --grpc-port 50001 -- mvn exec:java -pl=examples -Dexec.mainClass=client.HelloWorldClient -Dexec.args="-p 50001 'message one' 'message two'"
客户端主要实现说明
- 客户端 proto 文件为 dapr.proto
- 使用生成代码调用
InvokeServiceEnvelope()
函数- setId 设置该函数需要调用的服务 Id ,该 Id 指在使用 Dapr 启动实例时 --app-id 指定的名称(例如步骤2中的 hellogrpc)
- setData 设置调用函数的签名
- setMethod 设置调用函数名称
gRPC 服务端收到消息
输出为:
Server: message one
Server: message two
至此, Java 客户端服务端通过 Dapr 完成 gRPC 通讯。
Dapr 运用之 Java gRPC 调用篇的更多相关文章
- Dapr 运用之集成 Asp.Net Core Grpc 调用篇
前置条件: <Dapr 运用> 改造 ProductService 以提供 gRPC 服务 从 NuGet 或程序包管理控制台安装 gRPC 服务必须的包 Grpc.AspNetCore ...
- 第47篇-解释执行的Java方法调用native方法小实例
举个小实例,如下: public class TestJNI { static { // 程序在加载时,自动加载libdiaoyong.so库 System.loadLibrary("dia ...
- Java jacob调用打印机打印word文档
前面说了Java如何生成复杂的Word文档,今年记录下Java如何调用打印机打印word文档. 起初用的是自带的PrintJob,但是系统提供的打印机制并不成熟完整.网上的代码也是千篇一律,在我的打印 ...
- OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例
转自: http://blog.csdn.net/yanzi1225627/article/details/16917961 开发环境:windows+ADT Bundle+CDT+OpenCV-2 ...
- JNI编程(二) —— 让C++和Java相互调用(1)
自己在外面偷偷的算了下,又有将近两个月没更新过blog了.趁着今天有兴致,来更新JNI编程的第二篇文章.在第一篇里,大概介绍了JNI的特点.用途和优劣.并且做一个最简单的JNI的例子,不过说实话那个例 ...
- java如何调用接口方式二
java如何调用接口 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对 ...
- java如何调用接口方式一
java如何调用接口 其实对于java调用接口进行获取对方服务器的数据在开发中特别常见,然而一些常用的基础的知识总是掌握不牢,让人容易忘记,写下来闲的时候看看,比回想总会好一些. 总体而言,一些东西知 ...
- java如何调用对方http接口(II)
java如何调用接口 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对 ...
- JAVA方法调用中的解析与分派
JAVA方法调用中的解析与分派 本文算是<深入理解JVM>的读书笔记,参考书中的相关代码示例,从字节码指令角度看看解析与分派的区别. 方法调用,其实就是要回答一个问题:JVM在执行一个方法 ...
随机推荐
- pat 1011 World Cup Betting(20 分)
1011 World Cup Betting(20 分) With the 2010 FIFA World Cup running, football fans the world over were ...
- 1142 CREATE VIEW command denied to user 'blog'@'XXX.XXX.XXX.XXX' for table 'Articles'
创建视图时,报如上的1142错误,是数据库权限设置的问题. 进入mysql的root用户,赋予所有权限即可: mysql>grant all privileges on blogDB.* to ...
- 20191107-3 beta week 2/2 Scrum立会报告+燃尽图 02
此作业要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/9955] 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 ...
- IT人该如何未雨绸缪,不断提升自己的竞争力?同时尽量避免风险?
人会慢慢变老,变老后精力,记忆力乃至身体会慢慢变差,这是无法逆转的自然规律.随之会产生的是对中年危机的忧虑乃至恐惧,比如担心能力精力不及年轻人,从而导致收入锐减乃至失业. 对此我有如下三点不解.第一, ...
- 阿里巴巴大规模神龙裸金属 Kubernetes 集群运维实践
作者 | 姚捷(喽哥)阿里云容器平台集群管理高级技术专家 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击即可完成下载. 导读:值得阿里巴巴技术人骄傲的是 2019 ...
- Navicat Premium 12连接ubuntu18 ,Mysql 5.7.27-0
1,搭建好mysql服务器,cd /etc/mysql/mysql.conf.d,进入mysql配置目录,vim mysqld.cnf 2,注释掉,bind-address =127.0.0.1 , ...
- C#Windows Forms 计算器--xdd
一.计算器 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...
- Stream系列(九)Collector方法使用
toMap toList toCollection joining 视频讲解:https://www.bilibili.com/video/av77800638/ EmployeeTestCase.j ...
- 计蒜客 The Preliminary Contest for ICPC Asia Nanjing 2019
F Greedy Sequence You're given a permutation aa of length nn (1 \le n \le 10^51≤n≤105). For each ...
- oracle 触发器(自增写法)
触发器trigger 触发器我们也可以认为是存储过程,是一种特殊的存储过程. 存储过程:有输入参数和输出参数,定义之后需要调用 触发器:没有输入参数和输出参数,定义之后无需调用,在适当的时候会自动执行 ...