当前位置:网站首页>Grpc message sending of vertx
Grpc message sending of vertx
2022-07-03 07:26:00 【Sleeping Empire】
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 greetings
message 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 Green
2022-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 syntax (basic)
- [cmake] cmake link SQLite Library
- Hisat2 - stringtie - deseq2 pipeline for bulk RNA seq
- 带你全流程,全方位的了解属于测试的软件事故
- gstreamer ffmpeg avdec解码数据流向分析
- Advanced API (byte stream & buffer stream)
- Summary of Arduino serial functions related to print read
- IP home online query platform
- When MySQL inserts Chinese into the database, there is a diamond question mark garbled code
- Read config configuration file of vertx
猜你喜欢

Take you through the whole process and comprehensively understand the software accidents that belong to testing

Discussion on some problems of array

C code production YUV420 planar format file

不出网上线CS的各种姿势

高并发内存池

Comparison of advantages and disadvantages between most complete SQL and NoSQL

《指环王:力量之戒》新剧照 力量之戒铸造者亮相

3311. Longest arithmetic

FileInputStream and fileoutputstream

c语言指针的概念
随机推荐
7.2 brush two questions
Industrial resilience
I. D3.js hello world
C代码生产YUV420 planar格式文件
Arduino 软串口通信 的几点体会
Comparison of advantages and disadvantages between most complete SQL and NoSQL
Thoughts on project development
IO stream system and FileReader, filewriter
Basic components and intermediate components
[plus de détails] dernière entrevue complète redis (50)
Margin left: -100% understanding in the Grail layout
Logging log configuration of vertx
Understanding of class
TCP cumulative acknowledgement and window value update
VMware network mode - bridge, host only, NAT network
Spa single page application
【最詳細】最新最全Redis面試大全(50道)
“百度杯”CTF比赛 2017 二月场,Web:爆破-1
Raspberry pie update tool chain
Longest common prefix and