Skip to main content
Version: 2.8.x(Latest)

gRPC - Service Resolver

Code Source: https://github.com/gogf/examples/tree/main/grpc/resolver

Description

This example demonstrates how to use service resolver with etcd in gRPC services using GoFrame. It shows how to:

  • Configure service resolver with etcd
  • Register services to etcd
  • Discover services using resolver
  • Handle service updates

Structure

.
├── client/ # Client example
│ └── client.go # Client with service resolver
├── controller/ # Service controllers
│ └── helloworld.go # Hello service implementation
├── protobuf/ # Protocol buffer definitions
│ └── helloworld.proto # Service and message definitions
├── server/ # Server example
│ └── server.go # Server with service registration
├── go.mod # Go module file
└── go.sum # Go module checksums

Features

The example showcases the following features:

  1. Service Resolution

    • etcd integration
    • Service registration
    • Service discovery
    • Update handling
  2. Client Usage

    • Resolver configuration
    • Service discovery
    • Connection management
    • Error handling
  3. Server Features

    • Service registration
    • etcd integration
    • Health checking
    • Metadata management

Requirements

Prerequisites

  1. Running etcd instance:

    # Using Docker
    docker run -d --name etcd -p 2379:2379 -e ALLOW_NONE_AUTHENTICATION=yes bitnami/etcd:3.4.24
  2. Protocol buffer compiler:

    # For macOS
    brew install protobuf

    # Install protoc-gen-go and protoc-gen-go-grpc
    go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
    go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

Usage

  1. Generate protocol buffer code:

    cd protobuf
    protoc --go_out=paths=source_relative:. --go-grpc_out=paths=source_relative:. *.proto
  2. Start the server:

    cd server
    go run server.go
  3. Run the client:

    cd client
    go run client.go

Implementation Details

The example demonstrates:

  1. Service registration with etcd
  2. Service discovery using resolver