import ballerina/io;
import ballerina/log;
import ballerina/grpc;
endpoint grpc:Service ep {
host:"localhost",
port:9090
};@grpc:serviceConfig {generateClientConnector:false}
service<grpc:Listener> HelloWorld bind ep { @grpc:resourceConfig {streaming:true}
lotsOfReplies (endpoint client, string name) {
log:printInfo("Server received hello from " + name);
string[] greets = ["Hi", "Hey", "GM"];
foreach greet in greets {
log:printInfo("send reply: " + greet + " " + name);
grpc:ConnectorError err = client -> send(greet + " " + name);
if (err != ()) {
io:println("Error at lotsOfReplies : " + err.message);
}
}
_ = client -> complete();
log:printInfo("send all responses sucessfully.");
}}
gRPC Server StreamingThe gRPC Server Connector can be used to expose service gRPC service over http2. This sample is to demonstrate gRPC server streaming service interacting with gRPC non-blocking client. |
|
import ballerina/io;
import ballerina/log;
import ballerina/grpc;
|
This is server implementation for server streaming scenario |
endpoint grpc:Service ep {
host:"localhost",
port:9090
};
|
Server endpoint configuration |
@grpc:serviceConfig {generateClientConnector:false}
service<grpc:Listener> HelloWorld bind ep {
|
|
@grpc:resourceConfig {streaming:true}
lotsOfReplies (endpoint client, string name) {
log:printInfo("Server received hello from " + name);
string[] greets = ["Hi", "Hey", "GM"];
foreach greet in greets {
log:printInfo("send reply: " + greet + " " + name);
grpc:ConnectorError err = client -> send(greet + " " + name);
if (err != ()) {
io:println("Error at lotsOfReplies : " + err.message);
}
}
|
|
_ = client -> complete();
log:printInfo("send all responses sucessfully.");
}
|
Once all messages are sent, server send complete message to notify the client, I’m done. |
}
|
|
$ ballerina run grpc-server-streaming.bal
ballerina: initiating service(s) in 'grpc-server-streaming.bal'
|
Run the service |
ballerina run client.balx
|
Run client connector |