当前位置:网站首页>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
边栏推荐
- Mysql database | build master-slave instances of mysql-8.0 or above based on docker
- Win: enable and disable USB drives using group policy
- One plus six brushes into Kali nethunter
- When the industrial Internet era is truly developed and improved, it will witness the birth of giants in every scene
- Yyds dry inventory swagger positioning problem ⽅ formula
- Introduction to the gtid mode of MySQL master-slave replication
- Yyds dry inventory jetpack hit dependency injection framework Getting Started Guide
- Learn tla+ (XII) -- functions through examples
- 187. Repeated DNA sequence - with unordered_ Map basic content
- 小程序容器技术与物联网 IoT 可以碰撞出什么样的火花
猜你喜欢
MATLB | multi micro grid and distributed energy trading
STM32 series - serial port UART software pin internal pull-up or external resistance pull-up - cause problem search
After reading the average code written by Microsoft God, I realized that I was still too young
微信小程序:独立后台带分销功能月老办事处交友盲盒
Li Kou Jianzhi offer -- binary tree chapter
Behind the cluster listing, to what extent is the Chinese restaurant chain "rolled"?
Practice of tdengine in TCL air conditioning energy management platform
MySQL regexp: Regular Expression Query
Kibana installation and configuration
微信小程序:全网独家小程序版本独立微信社群人脉
随机推荐
微信小程序:全网独家小程序版本独立微信社群人脉
MATLB|多微电网及分布式能源交易
Luo Gu Pardon prisoners of war
The server time zone value ‘� й ��� ʱ 'is unrecognized or representatives more than one time zone【
流批一體在京東的探索與實踐
[CTF] AWDP summary (WEB)
Interesting practice of robot programming 14 robot 3D simulation (gazebo+turtlebot3)
La jeunesse sans rancune de Xi Murong
【CTF】AWDP总结(Web)
batchnorm. Py this file single GPU operation error solution
Game 280 of leetcode week
What sparks can applet container technology collide with IOT
如何搭建一支搞垮公司的技术团队?
Roads and routes -- dfs+topsort+dijkstra+ mapping
Yyds dry goods inventory [Gan Di's one week summary: the most complete and detailed in the whole network]; detailed explanation of MySQL index data structure and index optimization; remember collectio
Win: use PowerShell to check the strength of wireless signal
STM32 series - serial port UART software pin internal pull-up or external resistance pull-up - cause problem search
Do you know the eight signs of a team becoming agile?
Yyds dry inventory swagger positioning problem ⽅ formula
"2022" is a must know web security interview question for job hopping