跳到主要内容

配置Saydo OpenMAMA桥接

Solace 中间件和负载桥接是连接 OpenMAMA 客户端和 Solace PubSub+ 所需的传输机制,用于在它们之间传递消息数据。

OpenMAMA 客户端应用程序要向 Solace PubSub+ 发布消息或从 Solace PubSub+ 接收消息,必须通过 Solace 中间件桥接到事件代理建立一个或多个传输。

要选择 Solace 中间件桥接,OpenMAMA 应用程序必须使用 solace 桥接标识符(例如,在调用 mama_loadBridge() 时)。

OpenMAMA API 使用 mama.properties 配置文件中提供的属性来建立中间件桥接以及在该桥接上建立传输。

配置文件约定

mama.properties 文件使用分层命名约定(从左到右),以“.”作为每个元素之间的分隔符。终止元素是“=”,后面跟着属性值。Solace 中间件桥接和 Solace 负载桥接传输属性以 mama.solace.transport 开头,负载相关属性以 mama.solace.payload 开头。

以下条目显示了两个独立传输 mamapublisher7mamasubscriber3 的 Solace 特定传输属性:

mama.solace.transport.mamapublisher7.session_vpn_name=default
mama.solace.transport.mamapublisher7.session_reconnect_retries=3
mama.solace.transport.mamasubscriber3.session_vpn_name=default
mama.solace.transport.mamasubscriber3.session_reconnect_retries=3

在解压 SolOpenMAMA 桥接存档文件的 solopenmama_bridge 目录中提供了一个 sample_mama.properties 文件,用于 Solace 中间件桥接。此示例文件显示了一些 Solace 特定的 OpenMAMA 属性。

默认情况下,OpenMAMA API 调用 mama_open()WOMBAT_PATH 环境变量指定的位置加载用于中间件桥接的 mama.properties 文件。或者,OpenMAMA API 可以使用 open 函数使用位于特定目录中的另一个 mama.properties 文件,而不是由 WOMBAT_PATH 环境变量提供的 mama.properties 文件。

Saydo桥接配置属性

除了标准的中间件桥接配置属性外,Solace 中间件桥接还需要配置以下 Solace 特定的传输属性:

  • 全局属性
  • 上下文属性
  • 影响所有传输的属性
  • 每个传输的属性
  • PubSub+ 缓存属性

这些 Solace 特定的传输属性映射到 Solace C API 初始化函数以及上下文和会话属性,这些属性是建立客户端与事件代理连接所必需的。

当要使用 PubSub+ 缓存的最后值缓存功能时,还必须配置 Solace C API 缓存会话属性。

全局和上下文设置适用于所有传输,但其他属性必须为桥接要建立的每个传输设置。要为中间件桥接创建多个传输,必须在 mama.properties 文件中为每个传输提供一个唯一的传输名称。

如果在 mama.properties 文件中没有明确设置传输属性,则它们将设置为对应的 C API 会话属性的默认值。尽管在许多情况下可以使用默认值,但某些会话属性需要明确输入,以便客户端应用程序能够建立与事件代理的传输连接。有关详细信息,请参阅每个传输的属性。

全局属性

mama.solace.transport.global_* 属性用于初始化底层 Solace C API。这些属性的 C API 等价物是 solClient_initialize(...)

尽管可以通过这些 mama.solace.transport.global_* 属性设置传输到事件代理的日志级别,但建议通过标准 OpenMAMA 方法设置传输日志级别。Solace 中间件桥接将自动进行适当的调整。有关详细信息,请参阅日志记录。

上下文属性

mama.solace.transport.context_* 属性用于配置所有传输到事件代理的上下文属性。上下文充当一个容器,在其中配置一个或多个客户端会话,并处理与会话相关的事件。它封装了用于驱动与该上下文关联的会话的网络 I/O 和消息传递通知的线程。

这些属性的 C API 等价物是:

  • CONTEXT_TIME_RES_MS
  • CONTEXT_CREATE_THREAD

Solace 中间件桥接将 mama.solace.transport.context_create_thread 预设为值 1,以便自动创建内部上下文线程。此值不能被覆盖。

影响所有传输的属性

以下传输属性是 Solace 特定属性,用于为 Solace 中间件桥接设置订阅和发布偏好。这些属性影响所有传输,而不是某个特定的给定传输。

  • mama.solace.transport.queue_max_size — 此属性指定用于传输的中间件队列允许的最大消息数量。 默认值:50000

有效范围:1 到 2147483647

当定义的值被超过时,Solace 中间件桥接将要么暂停接收消息(如果订阅/取消订阅操作使用异步行为),要么丢弃任何进一步接收的消息(如果订阅/取消订阅操作使用同步行为)。

  • mama.solace.transport.subscribe_async — 此属性指定 Solace 中间件对订阅/取消订阅操作是使用同步还是异步行为。 默认值:1

要使用异步行为,以便订阅/取消订阅调用不会等待从事件代理收到确认,请将值设置为 1。

要使用同步行为,以便主题订阅/取消订阅调用会阻塞,直到从事件代理收到确认或达到超时,请将值设置为 0。

  • mama.solace.transport.send_publisher_info — 此属性设置 Solace 中间件桥接是否会在每条发布的消息中自动包含额外的发布者信息。 默认值:1

要包含发布者信息,请将值设置为 1。要不包含信息,请将值设置为 0。

  • mama.solace.transport.defaultqueue.timeout — 此属性指定关闭 Solace 中间件桥接时关闭默认事件队列的队列销毁超时时间。 默认值:2000

有效范围:1 到 2147483647

如果省略了 mama.solace.transport.defaultqueue.timeout,则使用 mama.defaultqueue.timeout 属性的值;如果两者都省略,则使用默认值。如果任一属性值超出范围,则使用默认值,并产生警告日志。

每个传输的属性

mama.solace.transport.<transport_name>.session_* 属性用于定义到事件代理的单个传输(即,单个客户端连接)。Solace 消息格式(SMF)用于促进由会话建立的客户端与事件代理之间的通信,此 SMF 通信通过单个 TCP 连接封装。

当 Solace 中间件桥接指定多个传输时,每个传输都需要单独的一组会话属性。

对于传输,未明确提供的会话属性将设置为默认值。尽管在许多情况下可以使用默认值,但某些客户端和事件代理参数需要特定输入才能建立与事件代理的连接。

Solace 中间件桥接将以下会话属性硬编码为启用状态。即使尝试在 mama.properties 文件中明确覆盖这些属性,这些属性也不能被覆盖:

  • session_reapply_subscriptions — 重新连接后,主题订阅将被记住并重新应用。
  • session_topic_dispatch — 发布到特定主题的消息可以由单独的接收回调处理。
  • session_connect_blocking — 在建立客户端连接后,发送、订阅和取消订阅操作将使用阻塞操作模式。

以下参数应为每个传输明确设置:

  • 允许恢复间隙
  • 认证方案
  • 主机
  • 本地主机
  • 消息 VPN
  • 发送订阅请求
  • 客户端认证属性
  • 连接/重新连接属性

有关会话属性的完整范围,请参阅 PubSub+ 消息传递 API C 参考文档中“定义”部分列出的会话属性。

默认情况下,会话是不安全的 — 在已连接的会话中,客户端与事件代理之间发送的 SMF 数据以纯文本形式传输。然而,也可以建立使用传输层安全性(TLS)/安全套接字层(SSL)协议的安全会话,以便加密 SMF 数据。有关如何配置特定 TLS/SSL 会话属性以及如何建立安全会话的详细信息,请参阅创建安全会话。

允许恢复间隙

允许恢复间隙属性(mama.solace.transport.<transport_name>.allow_recover_gaps)指定 Solace 中间件桥接是否应覆盖订阅设置以恢复间隙。

要保留订阅设置,请设置值为 1。要覆盖订阅设置并不恢复订阅间隙,请设置值为 0。默认值为 0。

认证方案

当主机事件代理最初接受客户端的连接时,该连接处于未认证状态,事件代理无法处理来自客户端的任何请求,直到连接被认证。

将用于客户端连接到事件代理的认证方案由会话配置的认证方案决定。认证方案可以是以下之一:

  • 基本认证

AUTHENTICATION_SCHEME_BASIC 会话属性设置基本认证方案。基本认证允许客户端使用有效的客户端用户名和密码对事件代理进行认证。这是默认的认证方案。

  • 客户端证书

AUTHENTICATION_SCHEME_CLIENT_CERTIFICATE 会话属性设置客户端证书认证方案。客户端证书认证允许客户端通过 X509v3 客户端证书向事件代理证明其身份。此认证方案还要求客户端使用安全连接(参阅创建安全会话)。

  • Kerberos

AUTHENTICATION_SCHEME_GSS_KRB 会话属性设置 Kerberos 认证方案。Kerberos 认证使用客户端通过批准的票据授予服务(TGS)获得的票据来认证连接的客户端。

每种客户端认证方案都需要为相关会话属性提供明确输入,以成功认证客户端。有关详细信息,请参阅客户端认证属性。

主机

SESSION_HOST 属性是必需的,用于指示会话连接或重新连接到的主机事件代理。主机条目由以下内容组成:

[协议:]主机[:端口]

其中:

  • 协议是用于传输通道的协议。有效值为:

    • tcp: 或 tcp:// — 使用 TCP 通道进行应用程序与其对等方之间的通信。如果未设置协议,则默认使用 TCP。
    • tcps: 或 tcps:// — 使用 TCP 上的 TLS/SSL 通道进行应用程序与其对等方之间的安全通信。
    • ws: 或 ws:// — 使用 WebSockets 传输进行应用程序与其对等方之间的通信。
    • wss: 或 wss:// — 使用 WebSockets 上的 TLS/SSL 通道进行应用程序与其对等方之间的安全通信。
    • http: 或 http:// — 使用超文本传输协议(HTTP)进行应用程序与其对等方之间的通信。
    • https: 或 https:// — 使用 HTTP 上的 TLS/SSL 通道进行应用程序与其对等方之间的安全通信。
  • 主机是一个或多个事件代理的 IP 地址或主机名,用于连接。可以在逗号分隔的列表中输入多达四个潜在的主机以进行连接或重新连接。列出多个主机允许客户端在第一个事件代理不可用时尝试连接或重新连接到备用主机。连接或重新连接尝试将按照列表中呈现的顺序进行。列出的主机事件代理可能位于不同的地理位置。

    • 当事件代理以高可用性(HA)冗余对运行时,不要将一对中的两个事件代理都列为宿主。冗余对使用相同的 IP 地址进行连接,因此它们在消息传递 API 中看起来像是一个事件代理。
    • 客户端的连接和重新连接行为由其与事件代理的连接所使用的会话属性控制。有关详细信息,请参阅每个主机的连接重试。
  • 端口是用于建立连接的端口号。只有当客户端需要使用除自动分配的默认端口号以外的端口时,才需要明确值。TCP 的默认端口号为 55555(未使用通道压缩时),或 55003(使用压缩时)。TLS/SSL 的默认端口为 55443(注意,使用 TLS/SSL 时不可用压缩)。

以下示例显示了如何指定传输通道类型。除非另有说明,否则使用默认端口 55555。

  • 192.168.160.28 — 使用 TCP 连接到 IP 地址 192.168.160.28。

  • dev212 — 使用 TCP 连接到主机名 dev212

  • dev212.solacesystems.com — 使用 TCP 连接到主机名 dev212.solacesystems.com

  • tcp:192.168.160.28 — 使用 TCP 连接到 IP 地址 192.168.160.28。

  • tcps:192.168.160.28 — 使用 TCP 上的 TLS/SSL 连接到 IP 地址 192.168.160.28 和端口 55443。

  • tcp:192.168.160.28:65535 — 使用 TCP 连接到 IP 地址 192.168.160.28 和端口 65535。

  • 在 Windows 环境中,应使用完全限定域名(FQDN)作为主机参数,并且它必须与事件代理用于 Kerberos 服务主体名称(SPN)的 FQDN 匹配。

  • 生成客户端的 SPN 时,使用以下格式:service_name/<客户提供的主机>@REALM。服务名称部分通过 KRB 服务名称会话属性配置(默认为 solace),而 realm 部分由 KRB 库使用的配置文件确定。一个示例服务主体名称是 solace/dev212@SIMPLESPNEXAMPLE.COM

  • 使用多个主机时,当前连接所用的主机生成 SPN。

本地主机

SESSION_BIND_IP 属性指示应用程序运行所在的物理主机的主机名或 IP 地址。当应用程序运行在多宿主主机上时,可能需要此会话属性。

在多宿主主机上,本地主机名或 IP 地址有助于确保 API 使用正确的网络接口与事件代理进行通信。

消息 VPN

SESSION_VPN_NAME 属性指示客户端连接到事件代理时要分配给客户端的消息 VPN 的名称。

消息 VPN 在事件代理上创建,以在连接到 Solace PubSub+ 的客户端组之间提供隔离。客户端的用户名由其被配置的消息 VPN 限定。

如果未提供特定的消息 VPN,则使用名为 default 的消息 VPN。default 消息 VPN 总是存在于事件代理上。尽管网络管理员可以更改 default 的配置设置,但不能将其删除。

发送订阅请求

如果为一个或多个传输启用了 PubSub+ 缓存(即,mama.solace.transport.<transport_name>.use_SolCache=1),发送订阅请求属性(mama.solace.transport.<transport_name>.send_subreq)指定 Solace 中间件桥接在进行缓存请求时是否还应向交互式发布者发送订阅请求消息。

当客户端进行缓存请求时,PubSub+ 缓存实例会返回初始值作为响应,因此通常不需要再向发布者发送订阅请求以获取初始值。然而,如果接收订阅请求与某些特殊行为相关联,则向发布者发送请求可能有益。例如,接收订阅请求可用于提示交互式发布者在初始订阅者对某个符号表现出兴趣时开始发布该符号的实时市场数据。

要在每次缓存请求后向发布者发送订阅请求消息,请将属性值设置为 1。要不在缓存请求后向发布者发送订阅请求消息,请将属性值设置为 0。默认值为 0。

客户端认证属性

可以选择用于客户端认证的三种可能的认证方案(基本认证、客户端证书认证或 Kerberos 认证),每种方案都需要通过会话属性指定额外的配置参数:

  • 基本认证属性
  • 客户端证书认证属性
  • Kerberos 认证属性
基本认证属性

基本认证是默认的客户端认证方案。使用此方案时,客户端必须为事件代理提供以下属性以认证客户端(这些属性未加密):

  • 用户名
  • 密码(可选)

用户名

会话需要用户名来认证通过该会话连接到事件代理的任何客户端。必须为每个传输在 SESSION_USERNAME 属性中提供用户名,并且它必须与事件代理上配置的客户端用户名帐户匹配。

当会话连接到事件代理时,客户端会随着它们在该会话上连接和断开连接而动态创建和删除。因此,多个客户端可能使用同一个用户名。

用户名属性与通过 Solace CLI 或 SolAdmin 显示的 client-username 属性相同。

密码

当事件代理上启用基本认证时,必须在 SESSION_PASSWORD 属性中提供有效的用户名/密码对,才能连接会话到事件代理。默认值为无密码。

客户端证书认证属性

客户端证书认证方案允许客户端使用从证书颁发机构(CA)获得的有效 X509v3 客户端证书向事件代理证明其身份。使用客户端证书认证方案时,客户端必须通过以下会话属性指定客户端证书和私钥及密码:

  • SESSION_SSL_CLIENT_CERTIFICATE_FILE — 客户端证书文件名
  • SESSION_SSL_CLIENT_PRIVATE_KEY_FILE — 私钥文件名
  • SESSION_SSL_CLIENT_PRIVATE_KEY_FILE_PASSWORD — 解密私钥的密码

如果无法加载指定的密钥库(例如,私钥文件或客户端证书文件不可读),则不会尝试连接,并且会向应用程序报告错误。

客户端证书认证依赖于事件代理上的 TLS/SSL 功能,因此它只能用于安全会话(参阅创建安全会话)。

事件代理所需配置

要使用客户端证书认证方案,主机事件代理必须正确配置 TLS/SSL 连接,并且必须为客户端连接到的特定消息 VPN 启用客户端证书认证。客户端连接到的消息 VPN 可以配置为使用客户端证书主题中的通用名称作为客户端用户名,或者使用客户端用户名(参阅客户端提供的用户名。默认情况下,事件代理根据客户端证书中的通用名称分配客户端用户名)。

Kerberos 认证属性

Kerberos 认证可用于认证到事件代理的安全或不安全会话。与客户端证书认证不同,Kerberos 认证不依赖于事件代理上的 TLS/SSL 功能。

要使用 Kerberos 认证方案,必须进行以下配置:

  • 所需版本和库:
    • Linux 和 SunOS 系统上的 C API — 必须使用实现 GSSAPI 第 2 版的库
    • Windows 系统上的 C API — 使用与 Windows 一起分发的安全支持提供程序接口(SSPI)
  • 将 Kerberos 设置为会话要使用的认证方案(参阅认证方案)。

事件代理所需配置

要使用 Kerberos 认证方案,必须在主机事件代理上配置 Kerberos 密钥表文件,并且必须在事件代理上配置 Kerberos 认证,并为客户端将连接到的任何消息 VPN 启用。有关详细信息,请参阅管理与 shell 用户。

创建安全会话

客户端可以选择创建安全会话,该会话需要可信服务器证书来建立与事件代理的 TLS/SSL 加密客户端连接。当创建安全会话时,SMF 信息将使用 TCP 上的 TLS/SSL 而不是纯文本 TCP 来传输。

要创建安全会话,必须正确配置以下会话属性,如下面所述。此外,安全会话将连接到的事件代理必须正确配置,并且必须有适当的服务器证书。有关配置事件代理以允许安全连接的信息,请参阅 TLS/SSL 服务配置。

TLS/SSL 会话的安全属性

要创建安全会话,必须正确配置以下会话属性:

  • 主机 — 每个 TLS/SSL 连接的主机条目都需要适当的 TLS/SSL 协议,并且可以指定特定的 TLS/SSL 端口号。如果未指定端口号,则使用默认端口 55443。有关配置主机的更多信息,请参阅主机。
  • SSL 排除协议 — 一个逗号分隔的加密协议列表,这些协议不能用于安全连接。可能的值为:
    • SSL v3.0(SSLv3
    • TLS v1.0(TLSv1
    • TLS v1.1(TLSv1.1
    • TLS v1.2(TLSv1.2

默认列表为空,这意味着可以使用任何加密协议(不排除任何协议)。

  • SSL 验证证书(SESSION_SSL_VALIDATE_CERTIFICATE) — 指示 API 是否应使用信任库中的可信证书来验证服务器证书。信任库是服务器上的一个目录,其中包含可信证书。此属性的默认值为 true

  • SSL 验证证书日期(SESSION_SSL_VALIDATE_CERTIFICATE_DATE) — 指示当收到过期证书或尚未使用的证书时,会话连接是否应失败。默认值为 true

  • SSL 密码套件(SESSION_SSL_CIPHER_SUITES) — 一个按优先级顺序排列的密码套件列表,用于与事件代理协商。密码套件是一组加密参数的组合,定义了用于身份认证、密钥协商、加密和完整性保护的安全算法和密钥大小。有关按优先级顺序列出的支持密码套件,请参阅 PubSub+ 消息传递 API C 参考文档。默认情况下,未列出任何密码套件,这表示应考虑所有支持的密码套件。

  • SSL 可信通用名称列表(SESSION_SSL_TRUSTED_COMMON_NAME_LIST) — 一个最多包含 16 个逗号分隔的通用名称的列表,这些通用名称被客户端信任。该列表应包括客户端可以连接到的所有事件代理的通用名称。

默认情况下,不提供任何通用名称;这意味着没有通用名称验证,所有通用名称都是可接受的。此外,如果将 SSL 验证证书设置为 false,则不执行通用名称验证。

  • SSL 可信存储目录(SESSION_SSL_TRUST_STORE_DIR) — 用于存储可信证书的网络目录。

连接/重新连接属性

以下会话属性用于配置会话连接和重新连接行为:

  • 连接超时
  • 连接重试
  • 重新连接重试
  • 重新连接重试等待
  • 每个主机的连接重试

有关这些会话属性在客户端连接尝试时如何相互关联的示例,请参阅连接重试示例。有关列出多个主机的更多信息,请参阅主机。

  • 要查找本节中列出的属性的默认值,请参阅 PubSub+ 消息传递 API C 参考文档。
  • 当使用 HA 冗余事件代理对时,从一个事件代理故障转移到其配对代理通常会在不到 30 秒内发生,然而,应用程序应至少尝试重新连接 5 分钟。为了允许 HA 冗余事件代理的 5 分钟重新连接持续时间,请将以下会话属性值设置如下:
    • 连接重试 — 1
    • 重新连接重试 — 5
    • 重新连接重试等待 — 3000 毫秒
    • 每个主机的连接重试 — 20
连接超时

连接超时属性(SESSION_CONNECT_TIMEOUT_MS)设置会话建立与事件代理的初始连接所允许的最大时间(以毫秒为单位)。

当使用主机列表时,为连接超时属性设置的时间量应用于每个主机的连接尝试。因此,例如,如果有四个主机条目,在最坏的情况下,应用程序可能需要等待每个主机条目的连接超时发生,乘以连接尝试次数,然后才会收到已建立连接或连接失败的通知。此等待时间还会因每次未成功尝试连接到主机后发生的重新连接重试等待时间而延长。

如果套接字层检测到失败,连接尝试可以更快地终止。

连接重试

连接重试属性(SESSION_CONNECT_RETRIES)设置尝试建立会话与主机事件代理的初始连接的次数。

连接重试属性的有效范围是 -1 或更大。值为 -1 表示永远重试;值为 0 表示不自动连接重试(即,尝试一次然后放弃)。

当使用主机列表时,API 尝试建立与列表中第一个事件代理的连接。如果该尝试失败,API 等待重新连接重试等待属性设置的时间,然后再次尝试连接到同一个主机。(每个主机的连接重试属性的值设置了一次连接尝试失败后要尝试连接到一个主机的次数,然后才移动到列表中下一个主机。)API 按列表中列出的顺序依次尝试连接到主机条目。

如果连接重试属性大于 0,API 可以在无法连接到列表中的任何主机后,从主机列表的开头重新开始连接尝试。每次 API 遍历主机列表而未建立连接都被视为一次连接重试。例如,如果使用了值为 2 的连接重试,API 可能会三次遍历所有列出的主机而未连接到它们:一次用于初始连接尝试,然后每次连接重试一次。每次连接重试都从列表中的第一个主机开始。

重新连接重试

重新连接重试属性(SESSION_RECONNECT_RETRIES)设置在已建立的会话中断后尝试重新连接到主机的次数。如果使用主机列表,此属性设置 API 将遍历主机列表以尝试重新连接到列表中的一个主机的次数。

有效范围是大于或等于 -1。值为 -1 表示永远重试;值为 0 表示不自动连接重试(即,尝试一次然后放弃)。

当使用主机列表时,如果 API 无法连接到列表中的第一个事件代理(即,首选事件代理),它将尝试连接到列表中的下一个事件代理,依此类推。API 将尝试连接到每个主机的次数由每个主机的连接重试属性设置的次数决定,然后才尝试连接到下一个主机。

每次未成功的连接尝试后,API 等待重新连接重试等待属性设置的时间到期,然后再次尝试连接到同一个主机、列表中的下一个主机,或者在所有列出的主机都尝试过后,再次尝试连接到列表中的第一个主机。

当会话与启用了事件代理冗余的主机一起工作时(即,列出的主机 IP 地址被一对冗余事件代理使用),应指定多个重新连接。禁用重新连接重试可能会影响在使用主动/主动冗余时可能发生的活动切换,并可能导致服务中断。例如,在故障转移场景中,如果没有启用重新连接重试,则无法尝试连接到冗余事件代理。

重新连接重试等待

重新连接重试等待属性(SESSION_RECONNECT_RETRY_WAIT_MS)设置在尝试重新连接到客户端之前连接到的同一主机后未成功时等待的时间(以毫秒为单位)。此时间到期后,可以再次尝试重新连接。有效值为 1 或更大。

如果 API 遍历主机列表中的所有条目而未建立连接,并且允许连接重试,因为连接重试属性大于 0,则 API 等待重新连接重试等待属性设置的时间,然后再次尝试连接到主机列表中的第一个主机。

每个主机的连接重试

当使用主机列表时,每个主机的重新连接重试(SESSION_CONNECT_RETRIES_PER_HOST)属性设置在移动到列表中的下一个主机之前,尝试连接或重新连接会话到一个主机的次数。

值为 0 表示进行一次连接或重新连接尝试(即,0 次重试)。值为 -1 表示尝试无限次的连接或重新连接重试(在这种情况下,API 只尝试连接或重新连接到列出的第一个主机)。

如果对主机的连接或重新连接尝试不成功,API 必须等待重新连接重试等待属性设置的时间,然后再次尝试连接或重新连接。

连接重试示例

下图显示了当使用主机列表时,连接尝试和重试属性如何影响会话连接尝试行为。为了演示目的,此示例显示了所有潜在连接尝试均未成功的最坏情况。

使用主机列表时的连接尝试行为

img

在此示例中,每个主机的连接重试属性值为 1,这意味着每个列出的四个主机条目将尝试连接两次。如果第一次连接尝试不成功,则 20 毫秒的重新连接重试等待值必须过去,然后可以尝试“重新连接”到同一个主机。如果此尝试不成功,则可以尝试连接到下一个主机条目,依此类推。

每次 API 遍历主机列表中的所有条目而未建立连接都被视为一次连接尝试或重试。因此,如果在初始连接尝试期间未建立与列出的主机之一的连接,则连接重试值为 2 表示 API 可以再次遍历主机列表两次(再次,每个列出的主机可以尝试最多两次,每次连接重试)。每次连接重试都从第一个主机开始,并按列出的顺序处理条目。

因此,在最坏的情况下,API 可能会三次遍历主机列表而未连接到主机(一次用于初始连接尝试,然后两次用于连接重试),并且由于每个主机的连接重试值为 2,每个主机将尝试两次,因此最多可以进行 24 次连接尝试。

PubSub+缓存属性

当要使用 PubSub+ 缓存的最后值缓存功能时,需要 Solace 属性。缓存属性是按每个传输设置的。因此,要启用 OpenMAMA 客户端使用可选的 PubSub+ 缓存功能,为 mama.solace.transport.<transport_name>.use_solcache 属性设置值 1。

当为给定传输启用了 PubSub+ 缓存时,mama.solace.transport.<transport_name>.cachesession_* 属性用于配置在该传输上建立的缓存会话。缓存会话包含静态缓存属性和缓存状态信息。它还允许多个未完成的缓存请求,并同步这些请求。

以下列出了可用的缓存会话属性。有关这些属性的更详细信息,请参阅 PubSub+ 消息传递 API C 参考的“定义”部分。

参数描述
cachesession_cache_name要发送缓存请求的分布式缓存、缓存集群或 PubSub+ 缓存实例的标识名称。
建议指定分布式缓存,因为指定 PubSub+ 缓存实例会绕过缓存请求的冗余和负载均衡。
cachesession_max_age要检索的消息的最大年龄(以秒为单位)。缓存时间超过此时间的消息不会被检索。
值为 0 时,将返回符合 cachesession_max_msgs 定义的主题的所有可能消息。
cachesession_max_msgs任何单个主题要检索的缓存消息的最大数量。如果某个主题缓存的消息数量超过最大值,则返回最新消息。
值为 0 时,将检索所有比 cachesession_max_age 更新的消息。
cachesession_reply_to缓存请求的回复主题。
在大多数情况下,建议不要指定此属性,以便 API 使用会话 P2P 回复主题。有关详细信息,请参阅 PubSub+ 消息传递 API C 参考中的 session_p2p_in_use
cachesession_rr_timeout_ms等待缓存请求响应的时间(以毫秒为单位)。这是每个请求的超时时间,应用程序发送的每个请求都可能导致多个底层请求。

缓存会话属性

Saydo负载配置属性

mama.solace.payload.version 属性用于在运行时指示要使用的 Solace 特定负载格式,用于编码和解码消息。它可以有值 1(负载版本 1 格式)或 2(使用负载版本 2 格式)。默认值为 2,如果没有明确设置值,则使用负载版本 2。

mama.solace.payload.version 属性是在 Solace 桥接的 SolOpenMAMA 6.2.1 中引入的。

Solace 桥接的 SolOpenMAMA 6.2.1+ 之间进行通信时,必须为 mama.solace.payload.version 属性使用相同的值,因为不支持桥接之间的负载格式转换。不同负载版本之间的交互不受支持,将导致不可预见的行为。

从 SolOpenMAMA 7.5.0 发布版开始,PubSub+ 缓存实例处理消息如下:

  • 非书籍消息 — PubSub+ 缓存实例可以处理负载版本 1 和 2 的消息。只有当更新消息的负载版本与该主题接收到的初始消息的负载版本匹配时,才会缓存更新消息。可以使用不同负载版本的新初始消息替换初始消息,但负载版本与初始消息不同的更新消息不会被缓存。
  • 书籍消息 — PubSub+ 缓存实例要求使用负载版本 2 发布书籍消息。使用负载版本 1 的书籍消息将被 PubSub+ 缓存实例丢弃。

使用 SolOpenMAMA 7.5.0 之前的客户端可以继续运行,但负载版本 1 的书籍消息将被 PubSub+ 缓存丢弃。

负载版本1

负载版本 1 格式与 Solace 桥接的 OpenMAMA 2.4.1 和 6.1.0 向后兼容,日期范围为 1970 年 1 月 1 日至 2106 年 2 月 7 日。

此外,此格式还支持 881 年 3 月至 3058 年 10 月之间的日期,但仅限于配置为使用负载格式版本 1 的 Solace 桥接的 OpenMAMA 6.2.1 之间。

当从使用负载格式版本 1 的 OpenMAMA 6.2.1 的 Solace 桥接发布超出 881 年 3 月至 3058 年 10 月范围的日期时,发布客户端将收到运行时错误,因为这些日期不受支持。

负载版本 1 不完全符合 OpenMAMA 6.2.1+,因为线缆不完全兼容,因此不建议与 OpenMAMA 6.2.1+ 一起使用。如果使用,并且从 OpenMAMA 6.2.1+ 的 Solace 桥接向 OpenMAMA 2.4.1 或 6.1.0 的 Solace 桥接发送 881 年 3 月至 1970 年 1 月或 2106 年 2 月至 3058 年 10 月之间的日期,该日期不会导致任何运行时问题,但将被视为无效;也就是说,数据完整性将被破坏。

负载版本2

负载版本 2 格式支持 OpenMAMA 6.2.1 中引入的扩展日期时间格式。

负载版本 2 与 6.2.1 之前的 Solace 桥接不向后兼容。

不支持 Solace 桥接的 OpenMAMA 6.2.1+ 运行不同负载格式版本之间的互操作性。

下表总结了负载格式版本如何影响不同版本的 Solace 桥接及其互操作性。

负载版本格式规范和互操作性

OpenMAMA 日期属性OpenMAMA 2.4.1 和 6.1.0 的负载版本 1OpenMAMA 6.2.1 的负载版本 1负载版本 2
0 到 (2^32 - 1) 秒
(对应于 1970 年 1 月 1 日至 2106 年 2 月 7 日)-(2^36 / 2) 到 (2^36 / 2 - 1) 秒
(对应于 881 年 3 月 7 日至 3058 年 10 月 26 日;有关实现限制的详细信息,请参阅日期时间)-(2^64 / 2) 到 (2^64 / 2 - 1) 秒
(根据 OpenMAMA API;有关实现限制的详细信息,请参阅日期时间)
秒的小数部分0 到 1,048,576 微秒(微秒精度)0 到 999,999 微秒(微秒精度,纳秒四舍五入)0 到 (2^32 - 1) 纳秒(根据 OpenMAMA API;纳秒精度)
精度0 到 150 到 150 到 255
提示0 到 150 到 150 到 255
线缆格式向后兼容部分向后兼容不向后兼容