1.0.0 • Published 3 years ago
jsn6-grpc v1.0.0
jsn6-grpc
gRPC server
Example
import { Startup } from 'jsn6-core/dist/core/Startup'
import { GRPCServer } from 'jsn6-grpc'
@Startup('gRPCServer.start')
export class MyGRPCServer extends GRPCServer {
constructor() {
super(config.grpcPort, config.host, {
proto: __dirname + '/proto/user.proto',
package: 'user',
})
}
async onInit() {
await this.loadFunctions()
await Promise.all([
redis.connect(),
mongo.connect(),
rabbit.connect(),
])
rabbit.publish('test-exchange', 'test', 'Hello world')
return super.onInit()
}
async isAvailable() {
await Promise.all([
redis.check(),
mongo.check(),
rabbit.check(),
])
}
async onDispose() {
await Promise.all([
redis.disconnect(),
mongo.disconnect(),
rabbit.disconnect(),
])
}
private async loadFunctions() {
console.log('Loading functions...')
await Promise.all([
import('@/controllers/grpc/UserController')
])
}
}
@/controllers/grpc/UserController.ts
file
import { Context, GRPCUnary } from 'jsn6-grpc'
export class UserController {
@GRPCUnary(
'User.getInfo',
(ctx, next) => {
const inputData = ctx.request
// Check something here
return next()
}
)
static getInfo(ctx: Context) {
ctx.body = {
data: 'Hello you'
}
}
}
/proto/user.proto
file
syntax = "proto3";
package user;
message RequestGetUserDetails {
int32 userID = 1;
}
message UserInfo {
optional int32 id = 1;
optional string name = 2;
}
message Links {
optional string next = 1;
optional string prev = 2;
}
message ResponseGetUserDetails {
optional int32 code = 1;
optional Links links = 2;
optional UserInfo data = 3;
}
service User {
rpc getInfo(RequestGetUserDetails) returns (ResponseGetUserDetails) {}
}
1.0.0
3 years ago