如何检查我的服务中的“elasticsearch 已关闭”情况?

How can I check `elasticsearch is down` condition in my service?

我有一些服务。我需要来自弹性搜索的 return 数据(如果可用)或 return 来自 DB:

@Service
class DefaulUserService implements UserService {

    private final DbDao dbDao;
    private final ElasticsearchDao elasticsearchDao;

    DefaultDoctorService(DbDao dbDao, ElasticsearchDao elasticsearchDao) {
        this.dbDao= dbDao;
        this.elasticsearchDao= elasticsearchDao;
    }

    @Override
    public List<User> findAll() {
       if(elasticsearch is down){
             return dbDao.findAll();
        } else {
             return elasticsearchDao.findAll();
       }
    }
}

如何检查服务中的 elasticsearch is down 条件?

您可以简单地使用 ES cluster health API 并检查它。它不仅会检查 ES 的正常运行时间,而且同样 API 可用于仅获取指定数据流和索引的健康状态。

几个重要状态

  1. 红色:- 一个或多个主碎片丢失。
  2. Yeloow:- 一个或多个副本碎片丢失。
  3. 绿色:- 一切都很好 :)

如果它真的宕机了,elasticsearchDao.findAll(); 肯定会引发异常,对吧?

@Service
class DefaultUserService implements UserService {

    private final DbDao dbDao;
    private final ElasticsearchDao elasticsearchDao;

    DefaultDoctorService(DbDao dbDao, ElasticsearchDao elasticsearchDao) {
        this.dbDao= dbDao;
        this.elasticsearchDao= elasticsearchDao;
    }

    @Override
    public List<User> findAll() {
        try {
            return elasticsearchDao.findAll();
        }
        catch(Exception e) {
            return dbDao.findAll();
        }
    }
}

显然,您必须选择一种更合适的异常类型来捕获。