Skip to content
This repository has been archived by the owner on Jul 16, 2024. It is now read-only.

RSocket Broker Filter

linux_china edited this page Mar 6, 2020 · 5 revisions

RSocket Broker端提供了Filter机制,方便开发者对Broker进行功能扩展,典型的场景如:

  • 可观测性(Observability): logging, metrics & tracing
  • 动态路由(Dynamic Routing): 动态调整路由规则,如进行A/B测试等,通过GSVRoutingMetadata对象字段的调整,可动态调整路由。
  • 审计(Audition): 构建服务间调用链,可用于服务治理
  • 断路保护(Circuit Breaker): 根据metrics信息分析,通过filter调整相应的逻辑处理,如返回Mono.error来处理过载
  • 混沌测试(Chaos Testing): 服务不可用、服务超时、异常数据、安全入侵模拟等
  • Feature Toggle: 针对某些特定的请求或者应用开启相关的特性,路由到不同的服务版本

RSocket Routing 有关于路由的想象规则介绍。

如何编写一个Filter

  • 在alibaba-broker-server下新建一个Filter类,如XxxxxRSocketFilter,然后extends RSocketFilter,实现相关的抽象方法
  • 将XxxxxRSocketFilter注册为Spring Bean,然后Broker会自动加载这个Filter
  • 在RSocket Broker控制台的RSocket Filters,你可以看到broker加载的所有的filter,同时你可以enable/disable对应的filter
  • RSocketExchange类提供了RSocket请求所有上下文信息,你可以修改路由等。

你可以参考样例代码: CanaryFilter

动态调整Filter逻辑?

RSocketFilter包含一个refresh的方法,如果你要实现在UI端动态规则调整,只需要实现这个refresh接口。

public abstract class RSocketFilter {
    
    /**
     * refresh filter logic dynamically
     *
     * @param properties properties configuration
     */
    public void refresh(String properties) {

    }
}

其他参考

RSocket

Network Protocol

  • Binary: byte stream
  • Async message
  • Multi transports
  • Reactive Semantics

Symmetric interactions

  • request/response
  • request/stream
  • fire-and-forget
  • channel

Transports

  • TCP+TLS
  • WebSocket+TLS
  • UDP(Aeron)
  • RDMA

Polyglot

Clone this wiki locally