当前位置:网站首页>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 Green7. Full address of the project
边栏推荐
- Restful Fast Request 2022.2.1发布,支持cURL导入
- 微信小程序:全网独家小程序版本独立微信社群人脉
- Nebula importer data import practice
- 179. Maximum number - sort
- Expansion operator: the family is so separated
- MySQL regexp: Regular Expression Query
- PowerShell: use PowerShell behind the proxy server
- Main window in QT application
- Codeforces Round #770 (Div. 2) ABC
- 220213c language learning diary
猜你喜欢

Main window in QT application
![[OpenGL learning notes 8] texture](/img/77/a4a784a535ea6f4c2382857b266cec.jpg)
[OpenGL learning notes 8] texture

Wechat applet: new independent backstage Yuelao office one yuan dating blind box

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

One plus six brushes into Kali nethunter

phpstrom设置函数注释说明

JVM - when multiple threads initialize the same class, only one thread is allowed to initialize

Win:使用 Shadow Mode 查看远程用户的桌面会话

Redis(1)之Redis简介

Win: use PowerShell to check the strength of wireless signal
随机推荐
【CTF】AWDP总结(Web)
Es uses collapsebuilder to de duplicate and return only a certain field
Exploration and Practice of Stream Batch Integration in JD
线上故障突突突?如何紧急诊断、排查与恢复
[CTF] AWDP summary (WEB)
微信小程序:微群人脉微信小程序源码下载全新社群系统优化版支持代理会员系统功能超高收益
Nebula Importer 数据导入实践
Practice of tdengine in TCL air conditioning energy management platform
微信小程序:全新独立后台月老办事处一元交友盲盒
ICSI 311 Parser
How to build a technical team that will bring down the company?
Wechat applet: independent background with distribution function, Yuelao office blind box for making friends
187. Repeated DNA sequence - with unordered_ Map basic content
Logstash、Fluentd、Fluent Bit、Vector? How to choose the appropriate open source log collector
PHP Basics - detailed explanation of DES encryption and decryption in PHP
If the consumer Internet is compared to a "Lake", the industrial Internet is a vast "ocean"
Codeforces Global Round 19 ABC
Heartless sword English translation of Xi Murong's youth without complaint
One plus six brushes into Kali nethunter
One click generation and conversion of markdown directory to word format