Dubbo 代理

Dubbo 代理过滤器解码 dubbo 客户端与服务端之间的 RPC 协议。解码的信息会被转换为元数据。元数据主要包含基础请求 ID、请求类型、序列化类型以及路由所需要的服务名称、方法名称、参数名称和参数值。

  • v3 API 参考

  • 过滤器的名称应该被配置为 envoy.filters.network.dubbo_proxy

统计

每个配置的 dubbo 代理过滤器统计以 dubbo.<stat_prefix>. 为跟,统计信息如下:

名称

类型

描述

request

Counter

请求总数

request_twoway

Counter

双向请求总数

request_oneway

Counter

单向请求总数

request_event

Counter

事件请求总数

request_decoding_error

Counter

解码异常请求总数

request_decoding_success

Counter

解码成功请求总数

request_active

Gauge

活跃请求总数

response

Counter

响应总数

response_success

Counter

成功响应总数

response_error

Counter

协议解析异常的响应总数

response_error_caused_connection_close

Counter

下游关闭连接导致的响应总数

response_business_exception

Counter

协议包含业务层返回异常的响应总数

response_decoding_error

Counter

解码异常响应总数

response_decoding_success

Counter

解码成功响应总数

response_error

Counter

协议解析异常响应总数

local_response_success

Counter

本地响应总数

local_response_error

Counter

本地编码异常响应总数

local_response_business_exception

Counter

本地协议包含业务异常的相应总数

cx_destroy_local_with_active_rq

Counter

本地销毁的有活跃查询的连接总数

cx_destroy_remote_with_active_rq

Counter

远端销毁的有活跃查询的连接总数

基于 dubbo 代理过滤器实现自定义过滤器

如果你想要基于 dubbo 协议实现一个自定义过滤器,dubbo 过滤器特提供了类似于 HTTP 的一种非常方便的扩展方式,首先第一步就是实现 DecoderFilter 接口,并给出过滤器的名称,例如 testFilter,第二步就是添加你自己的配置,配置方法可以参考下面的示例:

filter_chains:
- filters:
  - name: envoy.filters.network.dubbo_proxy
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.network.dubbo_proxy.v3.DubboProxy
      stat_prefix: dubbo_incomming_stats
      protocol_type: Dubbo
      serialization_type: Hessian2
      route_config:
        name: local_route
        interface: org.apache.dubbo.demo.DemoService
        routes:
        - match:
            method:
              name:
                exact: sayHello
          route:
            cluster: user_service_dubbo_server
      dubbo_filters:
      - name: envoy.filters.dubbo.testFilter
        typed_config:
          "@type": type.googleapis.com/google.protobuf.Struct
          value:
            name: test_service
      - name: envoy.filters.dubbo.router