Данная статья ставит целью познакомить читателя с технологией gRPC и не может служить рабочей документацией. Ссылки на официальную документацию с исчерпывающим описанием приведен в конце статьи в блоке дополнительные материалы
// stub - это сервис-заглушка, которая принимает запросы
private final GreeterGrpc.GreeterBlockingStub blockingStub;
...
// создание канала связи. target - это адрес сервера
ManagedChannel channel = ManagedChannelBuilder.forTarget(target)
// каналы поддерживают защищенное соединение (через SSL/TLS). для упрощения примера будем использовать незащищенное соединение
.usePlaintext()
.build();
// создание сервиса-заглушки
blockingStub = GreeterGrpc.newBlockingStub(channel);
...
// создание запроса с указанием имени. если не указывать явно, то отправится значение по-умолчанию
HelloRequest request = HelloRequest.newBuilder().setName(name).build();
// отправка запроса в процедуру sayHello
final HelloReply response = blockingStub.sayHello(request);
syntax = "proto3";
package helloworld;
// Объявление сервиса приветствия
service Greeter {
// Процедура приветствия
rpc SayHello (HelloRequest) returns (HelloReply)
}
// Сообщение запроса, содержащее имя пользователя
message HelloRequest {
string name = 1;
}
// Сообщение ответа, содержащее фразу-приветствие
message HelloReply {
string message = 1;
}
server {
server_name courier.unitbeandev.com;
location / {
grpc_pass grpc://localhost:50051; # ключевой момент, необходимо вместо proxy_pass http://localhost:{port}. Указание одного и того же порта важно на сервер и на клиенте
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
client_max_body_size 50m;
}
listen 443 ssl http2; # также важный момент конфигурации, поддержка HTTP/2.0
ssl_certificate /etc/letsencrypt/live/courier.unitbeandev.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/courier.unitbeandev.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = courier.unitbeandev.com) {
return 301 https://$host$request_uri;
}
server_name courier.unitbeandev.com;
listen 80;
return 404;
}