如何检查我的服务中的“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 可用于仅获取指定数据流和索引的健康状态。
几个重要状态
- 红色:- 一个或多个主碎片丢失。
- Yeloow:- 一个或多个副本碎片丢失。
- 绿色:- 一切都很好 :)
如果它真的宕机了,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();
}
}
}
显然,您必须选择一种更合适的异常类型来捕获。
我有一些服务。我需要来自弹性搜索的 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 可用于仅获取指定数据流和索引的健康状态。
几个重要状态
- 红色:- 一个或多个主碎片丢失。
- Yeloow:- 一个或多个副本碎片丢失。
- 绿色:- 一切都很好 :)
如果它真的宕机了,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();
}
}
}
显然,您必须选择一种更合适的异常类型来捕获。