You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solace技术咨询:无订阅者消息丢弃信息获取与跨区通信异常排查

Solace 问题排查指南

问题1:如何获取因主题无订阅者被丢弃的直接消息信息?

直接消息因无匹配订阅被丢弃是Solace部署中很常见的场景,你可以通过以下几种方式获取相关信息:

  • 启用丢弃消息日志:通过Solace CLI登录设备,执行 message-spool log-discarded-messages enable 开启全局丢弃消息日志;如果只想针对特定VPN,用 message-vpn <你的VPN名称> log-discarded-messages enable。之后在设备日志(默认路径/var/log/solace/)里就能找到标记为No Subscription Match的丢弃记录,里面包含消息主题、丢弃时间、来源客户端等细节。
  • 查看监控统计指标:
    • 全局层面:执行 show message-spool statistics,找到Direct Messages Discarded - No Match字段,这是所有VPN累计的无匹配直接消息丢弃数。
    • VPN层面:执行 show message-vpn <你的VPN名称> statistics,同样能找到对应VPN的丢弃计数,更精准。
  • 启用消息追踪:如果需要单条消息的完整路径,在VPN级别开启消息追踪:message-vpn <你的VPN名称> message-trace enable,然后配置追踪规则过滤无匹配的直接消息(比如message-vpn <VPN名称> message-trace filter add discard-reason "No Subscription Match")。之后通过show message-vpn <VPN名称> message-trace records就能看到每条被丢弃消息的详细信息,包括来源、主题、丢弃时刻等。

问题2:MNR架构下客户端回复消息无法送达服务器的排查步骤

这种跨MNR节点的消息投递问题,核心要围绕订阅同步、消息转发、两端配置三个维度排查:

第一步:验证MNR订阅同步是否正常

服务器在应用区节点订阅的returned/status主题,必须同步到DMZ节点,客户端发布的消息才能被路由到应用区。

  • 检查订阅同步状态:在两台Solace设备上分别执行 show message-vpn <你的VPN名称> multi-node redundancy subscription-sync status,确认Subscription Sync State是In Sync,没有同步延迟或失败的记录。
  • 检查DMZ节点是否存在服务器的订阅:在DMZ节点执行 show message-vpn <你的VPN名称> subscriptions,搜索returned/status,如果能看到标记为remote的订阅(来自应用区节点),说明同步正常;如果没有,那订阅没传过来,大概率是MNR配置问题:
    • 确认两个节点的VPN都开启了订阅同步:message-vpn <VPN名称> multi-node redundancy subscription-sync enable
    • 检查两台MNR节点之间的网络连通性,确保MNR专用端口(默认55555)能双向通信,没有防火墙拦截。

第二步:检查消息路由与投递链路

如果订阅同步正常,那就要看消息从客户端到服务器的路径是否通顺:

  • 确认客户端发布的消息被DMZ节点接收:在DMZ节点开启丢弃日志或消息追踪,看客户端发布的returned/status消息有没有被接收,有没有被标记为无订阅丢弃(如果订阅同步正常的话不应该出现这个情况)。
  • 检查跨节点消息转发统计:在应用区节点执行 show message-vpn <VPN名称> multi-node redundancy message-routing statistics,查看Messages Received from Remote Node计数是否有增长,对应客户端发布的消息数量;如果计数没变化,说明消息没从DMZ节点转发过来,可能是MNR消息路由没开启,执行message-vpn <VPN名称> multi-node redundancy message-routing enable开启。

第三步:排查两端客户端/服务器的配置细节

  • 服务器JCSMP订阅检查:
    • 确认订阅的主题returned/status完全匹配客户端发布的主题,没有通配符或拼写错误。
    • 如果是持久订阅(比如用了JCSMPFactory.createDurableTopicSubscription),要确认持久订阅在MNR节点间的同步配置是否开启:message-vpn <VPN名称> multi-node redundancy persistent-subscription-sync enable。
    • 在应用区节点执行 show message-vpn <VPN名称> subscriptions local,确认服务器的订阅已成功注册。
  • 客户端MQTT发布检查:
    • 确认发布的主题和服务器订阅的主题完全一致,MQTT的主题区分大小写,也要注意层级分隔符(/)的使用。
    • 检查发布的QoS级别:如果是QoS 1/2,确认DMZ节点是否正确处理并转发了确认消息,避免因为ACK超时导致消息重发或丢失。
  • ACL与权限检查:确认两个节点的VPN ACL都允许returned/status主题的发布和订阅操作,没有阻止跨节点的消息转发规则。

内容的提问来源于stack exchange,提问作者Koon Sang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:21:36