DEV Community

zhuyasen
zhuyasen

Posted on

Example 5, Automatically generate grpc gateway service project code, easy to achieve cross-service grpc calls

The grpc gateway is a service that acts as an intermediary between the client and grpc services. It serves as a bridge for communication between the client and the grpc service, responsible for forwarding client-initiated requests to the grpc server and returning the grpc server's response to the client. The grpc gateway can implement functions such as protocol conversion, routing, load balancing, caching, and rate limiting, thereby improving the availability and performance of the service.

Dependencies

After installing the "sponge" tool, execute the following command to open the UI interface:

sponge run
Enter fullscreen mode Exit fullscreen mode

Quick Creation of a GRPC Gateway Project

Go to the UI interface of "sponge", click on the left menu bar 【Protobuf】 --> 【generate gateway project】, fill in some parameters to generate the code for the grpc gateway project.

Image description

The web framework used is gin, and it also includes swagger documentation, common service governance code, build and deployment scripts, etc.

Enable GRPC Gateway Service to Call Microservice API Interfaces

Generate Connection Code

In order for the grpc gateway service to connect to the grpc service, additional code for connecting to the grpc service needs to be generated. Click on the left menu bar 【Public】 --> 【generate grpc connection code】, fill in the parameters to generate the code, and then move the generated code for connecting to the grpc service to the grpc gateway project.

Image description

Configure Microservice Addresses

Open the configuration file configs/edusys_gw.yml and set the grpc service addresses.

grpcClient:  
  - name: "user"
    host: "127.0.0.1"
    port: 8282
    registryDiscoveryType: "" 
    enableLoadBalance: false
Enter fullscreen mode Exit fullscreen mode

Copy the proto file of the grpc service

To be able to call the methods of the grpc service in the grpc gateway service, you need to copy the proto file of the grpc service to the directory api/edusys_gw/v1 in the grpc gateway service. In the grpc gateway directory, execute the following command:

# Note: This command is used to copy the proto file of the microservice created using sponge
make copy-proto SERVER=../../4_micro-grpc-protobuf
Enter fullscreen mode Exit fullscreen mode

Run Service

Run Microservice

Switch to the microservice user, and run the microservice:

make run
Enter fullscreen mode Exit fullscreen mode

Run grpc Gateway Service

Switch to the "edusys-grpc-gateway" directory, and execute the following commands:

# Generate code
make proto

# Open internal/service/user_gw.go and fill in specific logic code based on the example code provided
# Here is the specific logic code: https://github.com/zhufuyi/sponge_examples/blob/main/5_micro-gin-rpc-gateway/edusys-grpc-gateway/internal/service/edusys_gw.go

# Compile and start the service
make run
Enter fullscreen mode Exit fullscreen mode

Open http://localhost:8080/apis/swagger/index.html in your browser to test the API interfaces.

Image description

This is the grpc gateway service code generated from the above steps https://github.com/zhufuyi/sponge_examples/tree/main/5_micro-gin-rpc-gateway

Click to view detailed grpce gateway service development documentation https://go-sponge.com/zh-cn/rpc-gateway-development-protobuf

Billboard image

Synthetic monitoring. Built for developers.

Join Vercel, Render, and thousands of other teams that trust Checkly to streamline monitor creation and configuration with Monitoring as Code.

Start Monitoring

Top comments (0)

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay