Table of Contents
Question content
Solution
Home Backend Development Golang Failed to get RPC descriptor

Failed to get RPC descriptor

Feb 08, 2024 pm 09:39 PM
Internet problem

获取 RPC 描述符失败

#php editor Strawberry will introduce you to a common problem today: when making a remote procedure call (RPC), you may encounter the error "Failed to obtain RPC descriptor". This error usually means that the client cannot establish a valid connection with the server, which may be caused by network problems, server-side configuration errors, or permission issues. In this article, we will explain the cause of this error in detail and provide some solutions to fix it. Whether you are a beginner or an experienced developer, you will get useful information from this article on resolving the "Failed to get RPC descriptor" error.

Question content

I have the following prototype file:

service_myservice.proto

service MyService {
    rpc GetData(GetRequest) returns (GetResponse) {}
}
Copy after login

server.go

type Server struct {
    pb.UnimplementedMyServiceServer
    config util.Config
}

// NewServer creates a new gRPC server.
func NewServer(config util.Config) (*Server, error) {
    server := &Server{
        config: config,
    }

    return server, nil
}
Copy after login

Then I call this function in the main package

func runGrpcServer(config util.Config) {
    server, err := gapi.NewServer(config)
    if err != nil {
        log.Fatal().Err(err).Msg("cannot create server")
    }

    grpcLogger := grpc.UnaryInterceptor(gapi.GrpcLogger)
    grpcServer := grpc.NewServer(grpcLogger)
    pb.RegisterMyServiceServer(grpcServer, server)
    reflection.Register(grpcServer)

    listener, err := net.Listen("tcp", config.GRPCServerAddress)
    if err != nil {
        log.Fatal().Err(err).Msg("cannot create listener")
    }

    log.Info().Msgf("start gRPC server at %s", listener.Addr().String())
    err = grpcServer.Serve(listener)
    if err != nil {
        log.Fatal().Err(err).Msg("cannot start gRPC server")
    }
}
Copy after login

I'm using evans (https://github.com/ktr0731/evans) to test my grpc calls. My gRPC server is running and I can use evans to connect to localhost on a specific port (9090).

However, when I call show service in Evans, I get the following response:

localhost:9090> show service
+---------+-----+--------------+---------------+
| SERVICE | RPC | REQUEST TYPE | RESPONSE TYPE |
+---------+-----+--------------+---------------+
+---------+-----+--------------+---------------+
localhost:9090> call GetData
command call: failed to get the RPC descriptor for: GetData: service unselected
Copy after login

I think if I add pb.UnimplementedMyServiceServer in the Server structure, then this is forward compatible. But obviously, I'm missing some code.

What parts are missing to make MyService forward compatible?

Solution

REPLWhen using evans in mode, you should select the package and call ## before calling show service Service should be selected before #call GetData.

localhost:9090> show package
+-------------------------+
|         PACKAGE         |
+-------------------------+
| example                 |
| grpc.reflection.v1      |
| grpc.reflection.v1alpha |
+-------------------------+

localhost:9090> package example

example@localhost:9090> show service
+-----------+---------+--------------+---------------+
|  SERVICE  |   RPC   | REQUEST TYPE | RESPONSE TYPE |
+-----------+---------+--------------+---------------+
| MyService | GetData | GetRequest   | GetResponse   |
+-----------+---------+--------------+---------------+

example@localhost:9090> service MyService

example.MyService@localhost:9090> call GetData
id (TYPE_INT32) => 1
Copy after login

The above is the detailed content of Failed to get RPC descriptor. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1670
14
PHP Tutorial
1274
29
C# Tutorial
1256
24
Why can't I register at the Bitget Wallet exchange? Why can't I register at the Bitget Wallet exchange? Sep 06, 2024 pm 03:34 PM

There are various reasons for being unable to register for the BitgetWallet exchange, including account restrictions, unsupported regions, network issues, system maintenance and technical failures. To register for the BitgetWallet exchange, please visit the official website, fill in the information, agree to the terms, complete registration and verify your identity.

Cannot receive verification code when logging in with okx Cannot receive verification code when logging in with okx Jul 23, 2024 pm 10:43 PM

The reasons why you cannot receive the verification code when logging into OKX include: network problems, mobile phone settings problems, SMS service interruption, busy server and verification code request restrictions. The solutions are: wait to try again, switch networks, and contact customer service.

Why can't I log in to the MEXC (Matcha) official website? Why can't I log in to the MEXC (Matcha) official website? Dec 07, 2024 am 10:50 AM

The reason for being unable to log in to the MEXC (Matcha) website may be network problems, website maintenance, browser problems, account problems or other reasons. Resolution steps include checking your network connection, checking website announcements, updating your browser, checking your login credentials, and contacting customer service.

How to solve the problem of 'Undefined array key 'sign'' error when calling Alipay EasySDK using PHP? How to solve the problem of 'Undefined array key 'sign'' error when calling Alipay EasySDK using PHP? Mar 31, 2025 pm 11:51 PM

Problem Description When calling Alipay EasySDK using PHP, after filling in the parameters according to the official code, an error message was reported during operation: "Undefined...

Why can't I log in to the official website of gate.io? Why can't I log in to the official website of gate.io? Aug 19, 2024 pm 04:58 PM

Reasons why Gate.io cannot log in to its official website include: network problems, website maintenance, browser problems, security settings, etc. The solutions are: check the network connection, wait for the maintenance to end, clear the browser cache, disable plug-ins, check the security settings, and contact customer service.

Cannot receive verification code when logging in Ouyiokex Cannot receive verification code when logging in Ouyiokex Jul 25, 2024 pm 02:43 PM

Reasons and solutions for failing to receive the OKEx login verification code: 1. Network problems: check the network connection or switch networks; 2. Mobile phone settings: enable SMS reception or whitelist OKEx; 3. Verification code sending Restrictions: Try again later or contact customer service; 4. Server congestion: Try again later or use other login methods during peak periods; 5. Account freeze: Contact customer service to resolve. Other methods: 1. Voice verification code; 2. Third-party verification code platform; 3. Contact customer service.

What to do if the oracle can't be opened What to do if the oracle can't be opened Apr 11, 2025 pm 10:06 PM

Solutions to Oracle cannot be opened include: 1. Start the database service; 2. Start the listener; 3. Check port conflicts; 4. Set environment variables correctly; 5. Make sure the firewall or antivirus software does not block the connection; 6. Check whether the server is closed; 7. Use RMAN to recover corrupt files; 8. Check whether the TNS service name is correct; 9. Check network connection; 10. Reinstall Oracle software.

How to interpret the output results of Debian Sniffer How to interpret the output results of Debian Sniffer Apr 12, 2025 pm 11:00 PM

DebianSniffer is a network sniffer tool used to capture and analyze network packet timestamps: displays the time for packet capture, usually in seconds. Source IP address (SourceIP): The network address of the device that sent the packet. Destination IP address (DestinationIP): The network address of the device receiving the data packet. SourcePort: The port number used by the device sending the packet. Destinatio

See all articles