MarkLogic CoRB任务执行失败求助:ContentSource不可用错误
问题背景
运行版本2.4.3的CoRB任务时执行失败,使用HTTP应用服务器。配置文件参数如下:
XCC-CONNECTION-URI=xccs://username:password@Load Balancer URL:port/dbname THREAD-COUNT=2 ERROR-FILE-NAME=/path/example.out FAIL-ON-ERROR=false MODULES-DATABASE=modules_dbname MODULE-ROOT=/path/ PROCESS-MODULE=process_modules_example.xqy PROCESS-TASK=com.marklogic.developer.corb.ExportBatchToFileTask COMMAND-FILE=/path/CoRB/examplecommand.properties SSL-CONFIG-CLASS=com.marklogic.developer.corb.TrustAnyoneSSLConfig SSL-ENABLED-PROTOCOLS=TLSv1.2
执行时触发错误:
SEVERE: Error while running CORB
com.marklogic.developer.corb.CorbException: ContentSource not available.
at com.marklogic.developer.corb.DefaultContentSourcePool.get(DefaultContentSourcePool.java:117)
at com.marklogic.developer.corb.ModuleExecutor.run(ModuleExecutor.java:206)
at com.marklogic.developer.corb.ModuleExecutor.main(ModuleExecutor.java:87)
Dec 07, 2023 1:18:58 AM com.marklogic.developer.corb.ModuleExecutor main
INFO: processing error - exiting with code 2
已尝试启用和禁用以下两个SSL参数,但问题仍未解决:
SSL-CONFIG-CLASS=com.marklogic.developer.corb.TrustAnyoneSSLConfig SSL-ENABLED-PROTOCOLS=TLSv1.2
排查步骤
1. 验证XCC连接URI的正确性
- 测试网络连通性:用
telnet <Load Balancer URL> <port>或curl -v https://<Load Balancer URL>:<port>确认负载均衡地址和端口可正常访问 - 检查URI协议:如果使用的是未启用SSL的HTTP应用服务器,需将
xccs://改为xcc://;仅当HTTP应用服务器启用SSL时才使用xccs:// - 验证账号密码:使用XCC客户端工具(如MLCP或简单Java测试代码)单独测试用户名密码是否能成功连接到目标数据库
2. 排查负载均衡配置问题
- 确认负载均衡是否正确转发XCC请求到MarkLogic HTTP应用服务器,未拦截SSL握手或XCC特定请求
- 检查负载均衡SSL策略:即使配置了
TrustAnyoneSSLConfig,也要确认负载均衡允许TLSv1.2协议,且证书链无过期、域名不匹配等问题 - 验证路由规则:确保请求未被转发到错误的MarkLogic节点或端口
3. 检查MarkLogic服务器端配置
- 确认HTTP应用服务器允许XCC访问:HTTP应用服务器默认支持XCC,但需检查是否在「Allowed Request Content Types」中限制了XCC相关类型,或设置IP白名单拦截请求
- 查看服务器日志:检查MarkLogic的
ErrorLog.txt,查找XCC连接失败相关的错误记录,如认证失败、SSL握手错误等
4. 排查CoRB运行环境与依赖
- 验证XCC jar包兼容性:CoRB 2.4.3依赖的MarkLogic XCC jar包版本需与服务器版本匹配,版本不兼容可能导致连接失败
- 检查JVM代理配置:确认JVM未设置全局代理(如
http.proxyHost)导致无法连接负载均衡 - 查看CoRB错误日志:检查
/path/example.out文件,里面可能包含更详细的错误堆栈(如SSL握手失败的具体原因)
5. 绕过负载均衡测试
将XCC-CONNECTION-URI替换为直接连接MarkLogic节点的地址(如xccs://username:password@marklogic-node:ssl-port/dbname),如果连接成功,说明问题出在负载均衡配置;如果仍失败,问题则聚焦在CoRB配置或MarkLogic服务器端
内容的提问来源于stack exchange,提问作者Sravan

