Golang gRPC中间件:拦截器链接,验证,日志记录,重试等

gRPC Go Middleware: interceptors, helpers, utilities.

Middleware

gRPC Go recently acquired support for Interceptors, i.e. middleware that is executed either on the gRPC Server before the request is passed onto the user‘s application logic, or on the gRPC client either around the user call. It is a perfect way to implement common patterns: auth, logging, message, validation, retries or monitoring.

These are generic building blocks that make it easy to build multiple microservices easily. The purpose of this repository is to act as a go-to point for such reusable functionality. It contains some of them itself, but also will link to useful external repos.

grpc_middleware itself provides support for chaining interceptors, here‘s an example:

import "github.com/grpc-ecosystem/go-grpc-middleware"

myServer := grpc.NewServer(
    grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(
        grpc_ctxtags.StreamServerInterceptor(),
        grpc_opentracing.StreamServerInterceptor(),
        grpc_prometheus.StreamServerInterceptor,
        grpc_zap.StreamServerInterceptor(zapLogger),
        grpc_auth.StreamServerInterceptor(myAuthFunction),
        grpc_recovery.StreamServerInterceptor(),
    )),
    grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(
        grpc_ctxtags.UnaryServerInterceptor(),
        grpc_opentracing.UnaryServerInterceptor(),
        grpc_prometheus.UnaryServerInterceptor,
        grpc_zap.UnaryServerInterceptor(zapLogger),
        grpc_auth.UnaryServerInterceptor(myAuthFunction),
        grpc_recovery.UnaryServerInterceptor(),
    )),
)

Interceptors

Please send a PR to add new interceptors or middleware to this list

Auth

  • grpc_auth - a customizable (via AuthFunc) piece of auth middleware

Logging

  • grpc_ctxtags - a library that adds a Tag map to context, with data populated from request body
  • grpc_zap - integration of zap logging library into gRPC handlers.
  • grpc_logrus - integration of logrus logging library into gRPC handlers.
  • grpc_kit - integration of go-kit logging library into gRPC handlers.

Monitoring

Client

  • grpc_retry - a generic gRPC response code retry mechanism, client-side middleware

Server

Status

This code has been running in production since May 2016 as the basis of the gRPC micro services stack at Improbable.

Additional tooling will be added, and contributions are welcome.

License

go-grpc-middleware is released under the Apache 2.0 license. See the LICENSE file for details.

原文地址:https://www.cnblogs.com/ExMan/p/12269799.html

时间: 2024-10-09 01:36:29

Golang gRPC中间件:拦截器链接,验证,日志记录,重试等的相关文章

ASP.NET Core搭建多层网站架构【8-使用AOP动态拦截器进行服务层日志记录】

2020/01/29, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[7-编写角色业务的增删改查] 编写最简单的增删改业务,涉及到DI依赖注入的使用.AutoMapper的使用.工作单元与仓储的使用.雪花Id的生成 文章目录 此分支项目代码 本章节介绍了编写最简单的增删改查业务,涉及到DI依赖注入的使用.AutoMapper的使用.工作单元与仓储的使用 原文地址:https://www.cnblogs.com/ka

struts2学习(6)自定义拦截器-登录验证拦截器

需求:对登录进行验证,用户名cy 密码123456才能登录进去:  登录进去后,将用户存在session中: 其他链接要来访问(除了登录链接),首先验证是否登录,对这个进行拦截: com.cy.model.User.java: package com.cy.model; public class User { private String userName; private String password; public String getUserName() { return userNam

Struts2拦截器记录系统操作日志

前言 最近开发了一个项目,由于项目在整个开发过程中处于赶时间状态(每个项目都差不多如此)所以项目在收尾阶段发现缺少记录系统日志功能,以前系统都是直接写在每个模块的代码中,然后存入表单,在页面可以查看部分日志.这个系统并没有此要求,因此便想到了做一个系统通用的日志记录,主要记录数据有:操作时间.操作对象.操作方法.操作的一些参数以及操作结果.刚开始直接想到的是利用aspect实现aop记录日志,但实际应用中发现aspect并不能友好的拦截action,而是主要用作拦截service层业务.由于系统

关于阅读Struts2部分拦截器源码的记录

Struts2中的拦截器在ActionInvocation对象的invoke()方法中执行. ActionInvocation对象从配置文件中读取Interceptor对象,加入到自己的存取拦截器的容器中. 在invoke()方法中,当容器中还有Interceptor对象时,就执行对应Interceptor的intercept方法;在intercept方法中,除了加入拦截器自己的部分语句,还会调用同一个ActionInvocation对象的invoke方法,然后invoke方法再执行下一个Int

.Net Core中间件和过滤器实现错误日志记录

1.中间件的概念 ASP.NET Core的处理流程是一个管道,中间件是组装到应用程序管道中用来处理请求和响应的组件. 每个中间件可以: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下一个组件之前和之后执行业务逻辑. 中间件是一个请求委托( public delegate Task RequestDelegate(HttpContext context) )的实例,所以中间件的本质就是一个方法,方法的参数是HttpContext,返回Task.传入的HttpContext参数包含

python中用修饰器进行异常日志记录

当脚本中需要进行的的相同的异常操作很多的时候,可以用修饰器来简化代码.比如我需要记录抛出的异常: 在log_exception.py文件中, import functools import logging def create_logger(): logger = logging.getLogger("test_log") logger.setLevel(logging.INFO) fh = logging.FileHandler("test.log") fmt =

WebServices中使用cxf开发日志拦截器以及自定义拦截器

首先下载一个cxf实例,里面包含cxf的jar包.我下的是apache-cxf-2.5.9 1.为什么要设置拦截器? 为了在webservice请求过程中,能动态操作请求和响应数据, CXF设计了拦截器. 2.拦截器分类 1. 按所处的位置分:服务器端拦截器,客户端拦截器 2. 按消息的方向分:入拦截器,出拦截器 3. 按定义者分:系统拦截器,自定义拦截器 3.拦截器API Interceptor(拦截器接口) AbstractPhaseInterceptor(自定义拦截器从此继承) Loggi

golang grpc UnaryServerInterceptor用法

有的时候,当进行grpc调用的时候,并不希望客户端与服务端建立连接后直接就进入对应的方法体内.比如需要验证签名来确认客户端的身份,再执行相应的方法.这个时候就可以哟拿到Interceptor. golang grpc的拦截器(Interceptor)为UnaryServerInterceptor,为一个指向函数的指针. UnaryServerInterceptor在服务端对于一次RPC调用进行拦截.UnaryServerInterceptor是一个函数指针,当客户端进行grpc调用的时候,首先并

springMVC学习(12)-使用拦截器

一.拦截器配置和测试: 1)定义两个拦截器,(要实现HandlerInterceptor接口) HandlerInterceptor1: 1 package com.cy.interceptor; 2 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 6 import org.springframework.web.servlet.HandlerIn