如何使用SolrJ获取Solr主从复制状态
使用SolrJ调用Solr复制API获取索引版本状态
核心实现思路
Solr的复制API(/replication)可通过SolrJ的SolrRequest类直接构造请求,无需依赖Core Admin或特定处理器,只需指定正确的请求路径和参数即可完成调用。
具体代码实现
1. 依赖准备
确保项目引入对应版本的SolrJ依赖(以Maven为例):
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>你的Solr版本号</version> </dependency>
2. 调用indexversion命令的代码示例
import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.SolrResponseBase; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.util.NamedList; import java.io.IOException; public class SolrReplicationChecker { public static void main(String[] args) { // 目标Solr Core的基础URL String solrCoreBaseUrl = "http://host:port/solr/core_name"; // 自动管理SolrClient资源 try (SolrClient solrClient = new HttpSolrClient.Builder(solrCoreBaseUrl).build()) { // 构造复制请求,指定请求路径为"/replication" SolrRequest<SolrResponseBase> replicationRequest = new SolrRequest<>(SolrRequest.METHOD.GET, "/replication"); // 设置请求参数:command=indexversion ModifiableSolrParams params = new ModifiableSolrParams(); params.set("command", "indexversion"); replicationRequest.setParams(params); // 执行请求并解析响应 SolrResponseBase response = solrClient.request(replicationRequest); NamedList<Object> responseData = response.getResponse(); String indexVersion = responseData.get("indexVersion").toString(); String requestStatus = responseData.get("status").toString(); System.out.println("当前节点索引版本: " + indexVersion); System.out.println("请求状态: " + requestStatus); // 对比主从复制状态:分别调用主、从节点的API,若版本号一致则同步完成,否则存在延迟 } catch (IOException e) { e.printStackTrace(); } } }
关键说明
- 请求路径:必须指定为
/replication,这是Solr复制处理器的默认路径,无需额外配置。 - 参数扩展:若需要获取更详细的复制状态(如从节点同步进度、主节点配置),可将
command参数替换为details,解析响应中的更多字段即可。 - 状态判断:主从节点的
indexVersion一致,说明复制同步完成;版本不一致则表示存在同步延迟或未同步状态。
内容的提问来源于stack exchange,提问作者Puneet
相关产品推荐
相关产品推荐

