content: package com.alibaba.dubbo.spring.boot.health;
  
  import org.springframework.boot.actuate.health.AbstractHealthIndicator;
  import org.springframework.boot.actuate.health.Health;
  import org.springframework.boot.actuate.health.Status;
  
  import com.alibaba.dubbo.rpc.service.EchoService;
  import com.alibaba.dubbo.spring.boot.DubboConsumerAutoConfiguration;
  import com.alibaba.dubbo.spring.boot.bean.ClassIdBean;
  import com.alibaba.dubbo.spring.boot.listener.ConsumerSubscribeListener;
  
  /**
   * Dubbo health indicator
   *
   * @author xionghui
   * @version 1.0.0
   * @since 1.0.0
   */
  public class DubboHealthIndicator extends AbstractHealthIndicator {
  
    @Override
    public void doHealthCheck(Health.Builder builder) throws Exception {
      boolean up = true;
      for (ClassIdBean classIdBean : ConsumerSubscribeListener.SUBSCRIBEDINTERFACES_SET) {
        Object service = DubboConsumerAutoConfiguration.getDubboReference(classIdBean);
        EchoService echoService = (EchoService) service;
        if (echoService != null) {
          try {
            echoService.$echo("Hello");
            builder.withDetail(classIdBean.toString(), Status.UP.getCode());
          } catch (Throwable t) {
            up = false;
            builder.withDetail(classIdBean.toString(),
                Status.DOWN.getCode() + ", message: " + t.getMessage());
          }
        }
      }
      if (up) {
        builder.up();
      } else {
        builder.down();
      }
    }
  }
  