Spring JMS对接Solace连接被拒绝重启后恢复原因及Client name含义咨询
问题解答
为什么重启应用后连接就能恢复正常
该问题核心是Spring CachingConnectionFactory的默认缓存机制导致的:
CachingConnectionFactory默认会缓存JMS连接、会话、消息生产者对象复用,减少频繁创建销毁的性能开销。当Solace服务端维护时,原有长连接被强制断开,但缓存中的连接对象没有被标记为失效,后续调用JmsTemplate发送消息时,依然会尝试使用这个已经失效的缓存连接。- 你看到的8秒重试间隔是
sol-jms10.x版本的默认重连间隔,属于Solace JMS客户端的内置默认参数,不需要用户主动配置。 - 重启应用会清空
CachingConnectionFactory的所有缓存对象,重新初始化ConnectionFactory,创建全新的有效连接,因此可以恢复正常。
如果要避免后续出现同类问题,可以调整配置:
- 将
CachingConnectionFactory的reconnectOnException属性设置为true,开启异常时自动重建连接的能力 - 也可以显式配置Solace JMS客户端的重连参数,调整重试次数、间隔等规则,适配服务端维护场景
日志中Client name字段的含义
Solace的Client Name是服务端生成的全局唯一连接标识符,用来在Solace broker上唯一标记每一个客户端连接,格式为[用户名]/[实例序号]/[系统生成会话ID]/[随机后缀],你给出的示例ceaaa391610d/1/#11ba492e839/CfXgqoqM62各部分含义如下:
- 第一部分
ceaaa391610d:客户端连接Solace时使用的用户名,若未显式配置,默认会取客户端主机名/容器ID作为用户名 - 第二部分
1:同一用户名下的连接实例序号,代表这是该用户名建立的第1个有效连接 - 第三部分
#11ba492e839:Solace broker为该会话生成的全局唯一ID,#开头代表是系统自动生成的标识 - 第四部分
CfXgqoqM62:Solace JMS SDK本地生成的随机后缀,用来进一步避免连接标识冲突
你可以直接通过该Client Name在Solace的管理控制台查询对应连接的状态、消费进度、权限配置等信息。
内容的提问来源于stack exchange,提问作者Gentle Chen
相关产品推荐
相关产品推荐

