server

module
v0.2.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 22, 2023 License: Apache-2.0

README

server

Since we only have one port on Cloud Run, but want to serve both the "native" gRPC server and the gRPC-Gateway we have applied the ideas from here: Serving gRPC+HTTP/2 from the same Cloud Run container to get this to work.

Opentelemetry instrumentation is configured for the gRPC server via the otelgrpc lib to intercept both unary and stream communication.

Which handler to use is configurable, provide your implementation of choice by setting "HttpAndGrpcHandlerFunc" in the config. If this is not provided then the "DefaultHttpAndGrpcHandlerFunc" is used, and we also provide a "CorsHttpAndGrpcHandlerFunc" that handles preflight requests so have a closer look at: handlers.go.

Install

go get github.com/dentech-floss/server@v0.1.1

Usage

package example

import (
    "github.com/dentech-floss/server/pkg/server"
)

func main() {

    ctx := context.Background()

    ...

    appointmentServiceV1 := service.NewAppointmentServiceV1(repo, publisher, logger)
    patientGatewayServiceV1 := service.NewPatientGatewayServiceV1(repo, publisher, logger)

    ...

    server := server.NewServer(
        &server.ServerConfig{
            Port: config.Port,
            // The "server.DefaultHttpAndGrpcHandlerFunc" will be used if you don't set this
            // HttpAndGrpcHandlerFunc: server.CorsHttpAndGrpcHandlerFunc // ...for cors...
        },
    )

    appointmentServiceV1.Register(server.GrpcServer)
    appointmentServiceV1.RegisterMux(ctx, server.GrpcMux) // if you use the grpc gateway

    patientGatewayServiceV1.Register(server.GrpcServer)
    patientGatewayServiceV1.RegisterMux(ctx, server.GrpcMux)

    go server.Serve()
    handleShutdown(server, logger)
}

func handleShutdown(
    server *server.Server,
    logger *logging.Logger,
) {
    done := make(chan os.Signal, 1)
    signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
    sig := <-done // Block until we receive our signal
    logger.Info("Got signal: " + sig.String())

    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel()
    if err := server.Shutdown(ctx); err != nil {
        logger.Warn("Server shutdown failed: " + err.Error())
    }
}

Directories

Path Synopsis
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL