Azure多实例Solr设置ARRAffinity Cookie加载建议失败求助
背景
Azure Web App部署3个Solr实例,目前遇到建议无法在所有实例加载的问题,尝试用HttpSolrClient设置ARRAffinity Cookie绑定特定实例,但代码运行报错。
报错翻译
与服务器通信时发生IOException错误。frame_size_Error/无效的帧长度
问题分析与修复建议
1. HTTP/2协议适配问题
你使用的Http2SolrClient基于HTTP/2协议,而Azure的ARRAffinity Cookie机制在HTTP/2下容易出现帧大小不兼容的问题,这是报错的直接原因。建议切换回HTTP/1.1版本的HttpSolrClient,兼容性更稳定。
2. 修正Cookie设置代码
不管是切换到HTTP/1.1还是坚持使用HTTP/2,Cookie设置的细节必须注意:
- 保证Cookie的域名、路径与Solr服务地址完全匹配,否则Cookie无法被正确携带
- 不要硬编码实例ID,建议先通过普通请求获取Azure返回的有效
ARRAffinity值再复用
以下是HTTP/1.1版本的修正代码示例:
// 初始化Cookie存储 CookieStore cookieStore = new BasicCookieStore(); // 创建ARRAffinity Cookie HttpCookie arrCookie = new HttpCookie("ARRAffinity", "有效实例ID"); // 设置Cookie域名,例如你的Solr服务域名是xxx.azurewebsites.net arrCookie.setDomain("xxx.azurewebsites.net"); // 设置Cookie路径,对应Solr的根路径 arrCookie.setPath("/solr"); // 将Cookie添加到存储 cookieStore.add(null, arrCookie); // 构建HTTP/1.1版本的Solr客户端 String solrUrl = "http://xxx.azurewebsites.net/solr"; HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl) .withCookieStore(cookieStore) .build();
3. 替代方案:开启Azure粘性会话
如果手动设置Cookie过于繁琐,可以直接在Azure门户开启Web App的粘性会话(Sticky Sessions),Azure会自动处理ARRAffinity Cookie的生成与携带,无需在代码中手动配置。同时建议检查Solr建议组件的数据是否在所有实例中同步,避免因实例缓存不一致导致建议加载异常。
内容的提问来源于stack exchange,提问作者Rohi_Dev_1.0
相关产品推荐
相关产品推荐

