【问题标题】:#Solace - Implementing DR for solace Java JMS publisher#Solace - 为 solace Java JMS 发布者实现 DR
【发布时间】:2019-01-04 18:22:21
【问题描述】:

我有一个在 solace jar v7.1.2 上运行的现有应用程序,以 pub/sub 模式执行。现在我们已经升级到 v10.1.1 并且作为实施 DR 设置(灾难恢复)的一部分,我在配置中添加了一个以逗号分隔的主机。 应用程序可以成功连接到主要主机,但在切换期间(即从主要主机到 DR)应用程序连接失败,我收到以下错误。如果我重新启动我的应用程序,它会连接到 DR 主机。

com.solacesystems.jcsmp.JCSMPErrorResponseException: 400: Unknown Flow Name [Subcode:55]
        at com.solacesystems.jcsmp.impl.flow.PubFlowManager.doPubAssuredCtrl(PubFlowManager.java:266)
        at com.solacesystems.jcsmp.impl.flow.PubFlowManager.notifyReconnected(PubFlowManager.java:452)
        at com.solacesystems.jcsmp.protocol.impl.TcpClientChannel$ClientChannelReconnect.call(TcpClientChannel.java:2097)
        ... 5 more
|EAI-000376|||ERROR|    |EAI-000376 JMS Exception occurred, Description: `Error sending message - unknown flow name ((JCSMPTransportException)

需要帮助了解我们是否需要进行一些配置才能重新连接到 DR 主机以实现平滑切换。

【问题讨论】:

    标签: solace


    【解决方案1】:

    在早于 7.1.2.226 的 Solace JMS API 版本中,客户端已发布 Guaranteed 消息的任何会话将在 DR 切换后销毁。为了指示发布者流的断开和丢失,JMS API 将生成此异常。收到这些异常后,客户端应用程序应创建一个新会话。建立新会话后,客户端应用程序可以重新发布已发送但未在前一个会话上确认的任何 Guaranteed 消息,因为这些消息可能尚未被持久化和复制。

    但是,此行为在 7.1.2.226 及更高版本中得到了改进,因此 API 可以透明地处理此问题。不再需要实现代码来捕获此异常。您能否验证该应用程序未使用早期 7.1.2.226 的 API?这可以通过启用调试级日志来完成。

    【讨论】:

    • 感谢亚历山德拉的回复。
    • 我们之前使用的 jar 版本是 7.1.0.207,为了这次测试我们已经升级到 10.1.1。但是,正如我在问题中引用的那样,我们遇到了例外。那么这是否意味着该应用程序仍然指的是较旧的应用程序?另外,如果新 API 默认处理连接切换,需要多长时间自动完成?
    • @user9391262 是的,它可能仍然指的是旧 jar。 DR 切换仍然需要在路由器上手动执行。切换完成后,应用程序会自动重新连接。
    • 谢谢。将对此进行交叉检查。
    【解决方案2】:

    正如 Alexandra 所指出的,当使用有保证的消息传递时,从 7.1.2 版开始,Solace JMS API 保证即使在故障转移的情况下也能交付。接收到“Error Response (400) - Unknown Flow Name”的 INFO 级日志消息是正常的,这并不表示存在问题,但异常(带有堆栈跟踪)问题并表示无法保证交付。

    背景:如果客户端和代理(在 Solace 服务器上)之间的连接意外终止,代理会保持流状态 - 但仅持续三分钟。状态也被复制到 HA 配对代理以支持故障转移(但不复制到复制配对)。如果客户端在三分钟内重新连接,它可以从中断的地方继续。如果它在三分钟后重新连接,服务器将响应以下内容(将回显到日志中):

    2019-01-04 10:00:59,999 INFO  [com.solacesystems.jcsmp.impl.flow.PubFlowManager] (Context_2_Thread_reconnect_service) Error Response (400) - Unknown Flow Name
    2019-01-04 10:00:59,999 INFO  [com.solacesystems.jcsmp.impl.PubADManager] (Context_2_Thread_reconnect_service) Unknown Publisher Flow (flowId=36) recovered: 1 messages renumbered and resent (lastMessageIdSent =0)
    

    没关系:客户端 JMS 库将自动重新发送任何必要的消息,因此保证消息传递仍然得到保证。

    另外,为了确认一下,jar 名称表示版本,所以sol-jms-10.1.1.jar 使用版本 10.1.1。

    【讨论】:

      猜你喜欢
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 2017-03-13
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多