ServiceBusAdminClient的listRules方法无法返回订阅下全部规则
Service Bus Java SDK 7.5.2 listRules接口无法返回全量规则问题
问题背景
使用Java版Service Bus管理API库(版本7.5.2)管理Service Bus命名空间中的队列和主题资源时遇到运行异常。
涉及的业务逻辑为:检查主题下的订阅配置是否为最新版本,若配置过期则执行更新操作。
操作流程第一步是针对指定主题和订阅调用listRules方法获取规则列表,核心代码如下:
PagedIterable<RuleProperties> rulesIter = serviceBusAdminClient.listRules(topicDef.getName(), subscriptionDef.getName());
异常现象
listRules方法始终仅返回1条规则,但Azure门户中可查看到对应订阅下实际配置了2个筛选规则,接口返回结果存在缺失。- 后续业务代码会判定未被返回的规则为缺失状态,尝试创建该“缺失”规则时会直接抛出规则已存在的异常,导致整个配置校验更新流程失败。
最初使用stream()方法批量获取所有规则名称,实现代码如下:
listRulesResult.stream().map(RuleProperties::getName).collect(Collectors.toList());
该实现始终仅返回1条记录。后续尝试更换为streamByPage、iterateByPage方法做分页遍历,返回结果没有任何变化。
补充验证情况:同一份客户端代码调用列出队列、列出主题的接口时,均可正常返回全量多条记录,仅获取订阅下规则的接口无法返回全量数据,而Service Bus订阅本身原生支持配置多条规则。
排查进展更新
更新1:单独调用
getRule方法查询那条未被listRules返回的已存在规则时,可以正常获取到该规则的完整配置信息。更新2:编写最小化测试脚手架复现问题、准备提交官方issue时,精简测试环境中
listRules方法可按预期返回全量规则。目前推测是应用classpath下的依赖冲突或特定配置影响了SDK方法的正常行为,后续会进一步定位并同步根因,当前已确认精简测试环境下该功能运行正常,原业务应用环境存在异常。
内容的提问来源于stack exchange,提问作者EdH
相关产品推荐
相关产品推荐

