import ballerina/io;
import ballerina/grpc;
endpoint grpc:Service ep {
    host:"localhost",
    port:9090
};@grpc:serviceConfig {rpcEndpoint:"lotsOfGreetings",
    clientStreaming:true,
    generateClientConnector:false}
service<grpc:Listener> HelloWorld bind ep {
    onOpen (endpoint client) {
        io:println("connected sucessfully.");
    }    onMessage (endpoint client, string name) {
        io:println("greet received: " + name);
    }    onError (endpoint client, grpc:ServerError err) {
        if (err != ()) {
            io:println("Something unexpected happens at server : " + err.message);
        }
    }    onComplete (endpoint client) {
        io:println("Server Response");
        grpc:ConnectorError err = client -> send("Ack");
        if (err != ()) {
            io:println("Error at onComplete send message : " + err.message);
        }
    }
}

gRPC Client Streaming

The gRPC Server Connector can be used to expose service gRPC service over http2. This sample is to demonstrate gRPC client streaming service interacting with gRPC non-blocking client.

import ballerina/io;
import ballerina/grpc;

This is server implementation for client streaming scenario

endpoint grpc:Service ep {
    host:"localhost",
    port:9090
};

Server endpoint configuration

@grpc:serviceConfig {rpcEndpoint:"lotsOfGreetings",
    clientStreaming:true,
    generateClientConnector:false}
service<grpc:Listener> HelloWorld bind ep {
    onOpen (endpoint client) {
        io:println("connected sucessfully.");
    }
    onMessage (endpoint client, string name) {
        io:println("greet received: " + name);
    }
    onError (endpoint client, grpc:ServerError err) {
        if (err != ()) {
            io:println("Something unexpected happens at server : " + err.message);
        }
    }
    onComplete (endpoint client) {
        io:println("Server Response");
        grpc:ConnectorError err = client -> send("Ack");
        if (err != ()) {
            io:println("Error at onComplete send message : " + err.message);
        }
    }
}
$ ballerina run grpc-client-streaming.bal
ballerina: initiating service(s) in 'grpc-client-streaming.bal'

Run the service

ballerina run client

Run client connector