监听告警事件

场景描述

Java-Chassis 会在运行期间抛出一些与微服务治理相关的告警事件,当前涉及的场景包括:

  • 服务熔断
  • 实例隔离

用户可以自行扩展告警事件监听器,获取相关事件。

告警事件列表

事件 事件属性 属性说明
CircutBreakerEvent
服务熔断事件
type 事件类型,包含`OPEN`/`CLOSE`两个枚举值,分别表示事件发生和事件恢复
role 熔断事件发生时本服务实例的角色,有`CONSUMER`/`PRODUCER`两种取值
microservice 被熔断的服务名
schema 被熔断的服务的契约ID
operation 被熔断的服务的方法名
currentTotalRequest 当前总请求数
currentErrorCount 当前请求出错计数
currentErrorPercentage 当前请求出错百分比
requestVolumeThreshold 10s内请求数需要大于等于这个参数值,才开始计算错误率和判断是否进行熔断
sleepWindowInMilliseconds 熔断效果维持时间
errorThresholdPercentage 错误率阈值,达到此阈值则触发熔断
IsolationServerEvent
实例隔离事件
type 事件类型,包含`OPEN`/`CLOSE`两个枚举值,分别表示事件发生和事件恢复
microserviceName 被隔离实例的微服务名
endpoint 被隔离实例的endpoint信息
instance 被隔离实例的实例信息,类型为org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance
currentTotalRequest 当前实例总请求数
currentCountinuousFailureCount 当前实例连续出错次数
currentErrorPercentage 当前实例出错百分比
minIsolationTime 实例隔离效果维持的最短事件,单位为毫秒
enableRequestThreshold 开启实例隔离状态统计的阈值,总请求次数超过此阈值时开始计算请求失败情况,判断是否隔离实例
continuousFailureThreshold 连续请求失败阈值,在连续请求失败次数触发隔离的模式下,如果一个实例连续调用失败次数超过此阈值则被隔离
errorThresholdPercentage 请求错误率阈值,在请求错误率触发隔离的模式下,如果一个实例的请求失败率超过此阈值则被隔离
singleTestTime 实例隔离效果维持时间

使用参考

  • 定义告警事件监听器
public class AlarmListener {
  @Subscribe
  public void onAllKindsOfEvent(AlarmEvent event) {
    // 监听告警事件的基类以获取所有种类的告警事件
  }

  @Subscribe
  public void onCircutBreakerEvent(CircutBreakerEvent event) {
    // 仅监听服务熔断事件
  }

  @Subscribe
  public void onIsolationServerEvent(IsolationServerEvent event) {
    // 仅监听实例隔离事件
  }
}

事件监听器示例如上所示,监听器里的三个方法分别用于监听全部告警事件、仅监听服务熔断事件、仅监听实例隔离事件。 注意,监听器里的三个方法不是必需的,使用者可以根据自身需要,自行决定需要在监听器中定义的方法。

  • EventBus中注册事件监听器
EventManager.getEventBus().register(receiveEvent);