首页 > 解决方案 > 如何检查我的服务中的“elasticsearch is down”条件?

问题描述

我有一些服务。我需要从弹性搜索返回数据(如果可用)或从数据库返回:

@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我的服务中的条件?

标签: springelasticsearchspring-data-elasticsearchspring-actuator

解决方案


如果它真的宕机了,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();
        }
    }
}

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


推荐阅读