Maison >développement back-end >Golang >Chaîne d'intercepteur de client GRPC personnalisé/DialOptions

Chaîne d'intercepteur de client GRPC personnalisé/DialOptions

PHPz
PHPzavant
2024-02-14 08:27:10896parcourir

链自定义 GRPC 客户端拦截器/DialOptions

Les intercepteurs clients GRPC personnalisés et DialOptions sont des outils très utiles lors de la communication sur un réseau. Ces outils peuvent aider les développeurs à ajouter des fonctionnalités et une logique de traitement supplémentaires au client GRPC pour répondre à des besoins spécifiques. Dans cet article, l'éditeur PHP Banana vous présentera comment utiliser ces outils pour personnaliser et optimiser le comportement du client GRPC. En utilisant ces intercepteurs et DialOptions, les développeurs peuvent facilement mettre en œuvre un traitement personnalisé des demandes et des réponses, une gestion des connexions et d'autres fonctions, améliorant ainsi l'évolutivité et les performances du système. Explorons ensemble ces fonctionnalités puissantes !

Contenu de la question

Je souhaite lier certains intercepteurs DialOptions/côté client. Mais pour une raison quelconque, seul le dernier intercepteur personnalisé est appelé :

CB5C9B4EECA35A2077063ECDCD731918

J'ai ajouté TransportCredentials pour qu'il n'y ait pas d'erreur au démarrage (concernant le manque de sécurité du transport).

Qu'est-ce qui me manque ici ?

Solution de contournement

Vous devez lier l'intercepteur (client | serveur) :

Voir grpc.WithChainUnaryInterceptor

Par exemple :

func main() {
    myInt1 := func(ctx context.Context, method string, req, reply any, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
        print("testInterceptor invoked")
        return invoker(ctx, method, req, reply, cc, opts...)
    }
    myInt2 := func(ctx context.Context, method string, req, reply any, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
        print("testInterceptor2 invoked")
        return invoker(ctx, method, req, reply, cc, opts...)
    }
    opts := []grpc.DialOption{
        grpc.WithTransportCredentials(insecure.NewCredentials()),
        grpc.WithChainUnaryInterceptor(
            myInt1,
            myInt2,
        ),
    }

    _, err := grpc.DialContext(context.Background(), "my-adress:443", opts...)
    if err != nil {
        log.Fatal(err)
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer