当前位置:网站首页>Grpc message sending of vertx
Grpc message sending of vertx
2022-07-05 01:46:00 【Xiong Da believed what Xiong er said】
Introduce
Vert.x gRPC modular , It will Google gRPC Programming style and Vert.x Consistent style . gRPC It's a high performance 、 Open source 、 General purpose RPC frame , It is an interprocess communication technology , from Google Introduction , be based on HTTP2 Protocol standard design and development , By default Protocol Buffers Data serialization protocol , Support multiple development languages .gRPC Provides a simple way to accurately define Services , And automatically generate a reliable function library for the client and server . stay gRPC The client can directly call remote programs on different servers , Using gestures looks like calling a local program , Easily realize the connection of remote services 、 call 、 Operation and commissioning , It's easy to build distributed applications and services . And a lot of RPC The system is the same , The server is responsible for implementing the defined interface and processing the client's request , The client directly calls the required services according to the interface description . The client and server can use... Respectively gRPC Different language implementations supported .
1. maven Project dependence
<dependencies> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-core</artifactId> </dependency> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-grpc</artifactId> </dependency> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-config-yaml</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.lance.common</groupId> <artifactId>vertx-common-core</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency></dependencies>
2.vertx Start public class
public class StartApplication { public static void runClustered(Class<? extends AbstractVerticle> clazz) { run(clazz, new VertxOptions(), null, true); } public static void run(Class<? extends AbstractVerticle> clazz) { run(clazz, new VertxOptions(), null, false); } public static void run(Class<? extends AbstractVerticle> clazz, DeploymentOptions options) { run(clazz, new VertxOptions(), options, false); } public static void run(Class<? extends AbstractVerticle> clazz, VertxOptions options, DeploymentOptions deploymentOptions, boolean clustered) { run(clazz.getName(), options, deploymentOptions, clustered); } public static void run(String className, VertxOptions options, DeploymentOptions deploymentOptions, boolean clustered) { if (options == null) { // Default parameter options = new VertxOptions(); } Consumer<Vertx> runner = vertx -> { try { if (deploymentOptions != null) { vertx.deployVerticle(className, deploymentOptions); } else { vertx.deployVerticle(className); } } catch (Throwable t) { log.error("Vertx deploy fail: ", t); } }; if (clustered) { Vertx.clusteredVertx(options, res -> { if (res.succeeded()) { Vertx vertx = res.result(); runner.accept(vertx); } else { res.cause().printStackTrace(); } }); } else { Vertx vertx = Vertx.vertx(options); runner.accept(vertx); } }}
3.Grpc Server side
public class HelloServer extends AbstractVerticle { public static void main(String[] args) { StartApplication.run(HelloServer.class); } @Override public void start() { // Create the server VertxServer server = VertxServerBuilder.forAddress(vertx, RpcConst.HOST, RpcConst.PORT) .addService(new VertxGreeterGrpc.GreeterVertxImplBase() { @Override public Future<Hello.HelloReply> sayHello(Hello.HelloRequest request) { log.info("Hello {}", request.getName()); String message = "Thanks " + request.getName(); return Future.succeededFuture(Hello.HelloReply.newBuilder().setMessage(message).build()); } }) .build(); // start the server server.start(ar -> { if (ar.failed()) { log.error("Grpc server start fail: ", ar.cause()); } else { log.info("Grpc server[port: {}] start success.", server.getPort()); } }); }}
4.Grpc client
public class HelloClient extends AbstractVerticle { public static void main(String[] args) { StartApplication.run(HelloClient.class); } @Override public void start() { // Create the channel ManagedChannel channel = VertxChannelBuilder .forAddress(vertx, RpcConst.HOST, RpcConst.PORT) .usePlaintext() .build(); VertxGreeterGrpc.GreeterVertxStub stub = VertxGreeterGrpc.newVertxStub(channel); Hello.HelloRequest request = Hello.HelloRequest.newBuilder().setName("Jim Green").build(); stub.sayHello(request).onComplete(asyncResponse -> { if (asyncResponse.succeeded()) { log.info("Got the server response: {}", asyncResponse.result().getMessage()); } else { log.error("Could not reach server fail: ", asyncResponse.cause()); } }); }}
5.Proto file
syntax = "proto3";option java_multiple_files = false;option java_outer_classname = "Hello";package com.lance.grpc.hello.gen;// The greeting service definition.service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {}}// The request message containing the user's name.message HelloRequest { string name = 1;}// The response message containing the greetingsmessage HelloReply { string message = 1;}
6. journal
2022-02-13 20:22:19.301 INFO 21 --- [ntloop-thread-1] com.lance.grpc.hello.HelloClient ---[ 38] : Got the server response: Thanks .Jim Green2022-02-13 20:21:42.852 INFO 21 --- [ntloop-thread-1] com.lance.grpc.hello.HelloServer ---[ 45] : Grpc server[port: 18006] start success.2022-02-13 20:22:19.254 INFO 21 --- [ntloop-thread-1] com.lance.grpc.hello.HelloServer ---[ 33] : Hello Jim Green
7. Full address of the project
边栏推荐
- Redis(1)之Redis简介
- Wechat applet: the latest WordPress black gold wallpaper wechat applet two open repair version source code download support traffic main revenue
- batchnorm.py这个文件单GPU运行报错解决
- DOM basic syntax
- [CTF] AWDP summary (WEB)
- Luo Gu Pardon prisoners of war
- 微信小程序:微群人脉微信小程序源码下载全新社群系统优化版支持代理会员系统功能超高收益
- MySQL REGEXP:正则表达式查询
- Blue Bridge Cup Square filling (DFS backtracking)
- Win:使用组策略启用和禁用 USB 驱动器
猜你喜欢
DOM basic syntax
Codeforces Global Round 19 ABC
R language uses logistic regression and afrima, ARIMA time series models to predict world population
如何搭建一支搞垮公司的技術團隊?
runc hang 导致 Kubernetes 节点 NotReady
One plus six brushes into Kali nethunter
Exploration and practice of integration of streaming and wholesale in jd.com
Win: use PowerShell to check the strength of wireless signal
JVM's responsibility - load and run bytecode
Wechat applet: exclusive applet version of the whole network, independent wechat community contacts
随机推荐
Classification of performance tests (learning summary)
Win: enable and disable USB drives using group policy
Huawei machine test question: longest continuous subsequence
Word processing software
Summary of regularization methods
[OpenGL learning notes 8] texture
DOM basic syntax
线上故障突突突?如何紧急诊断、排查与恢复
R语言用logistic逻辑回归和AFRIMA、ARIMA时间序列模型预测世界人口
Great God developed the new H5 version of arXiv, saying goodbye to formula typography errors in one step, and mobile phones can also easily read literature
MySQL REGEXP:正则表达式查询
Wechat applet: exclusive applet version of the whole network, independent wechat community contacts
Flutter 2.10 update details
One click generation and conversion of markdown directory to word format
Interesting practice of robot programming 16 synchronous positioning and map building (SLAM)
Runc hang causes the kubernetes node notready
Win:使用组策略启用和禁用 USB 驱动器
Hedhat firewall
Database postragesq PAM authentication
220213c language learning diary