跳到主要内容

初始化和监控API

本节描述了如何初始化消息 API,并提供了有关使用消息 API 日志记录和会话统计信息的信息。

初始化API

要使用消息 API,必须先对其进行初始化。

Java RTO、C 和 .NET API

调用下表中列出的函数或方法来初始化 Java RTO、C 或 .NET API。当这些消息 API 被初始化时,您可以可选地设置所有日志类别的初始日志级别过滤器,以便只发出指定级别及更严重的日志。(有关日志级别的更多信息,请参阅配置日志记录。)

您还可以设置用于临时保存应用程序空间中消息的内存池的全局缓冲区大小(对于 Java RTO API,请参阅修改全局池缓冲区大小;对于 C API,请参阅 C API 最佳实践;对于 .NET API,请参阅修改全局池缓冲区大小)。

JavaScript 和 Node.js API

调用下表中列出的函数来初始化 JavaScript 或 Node.js API。默认情况下,当这些 API 被初始化时,它们包含版本 7 行为配置文件,以实现向后兼容。行为配置文件允许旧应用程序与 API 的旧版本保持兼容,同时允许新应用程序利用更新的推荐默认值。编写新应用程序时,Solace 建议使用最新可用的配置文件。例如,如果版本 10 是最新配置文件,请在应用程序的入口点添加以下内容,以使用版本 10 配置文件初始化 API,并使用 Solace 在版本 10 发布时推荐的默认属性值运行它:

var factoryProps = new solace.SolclientFactoryProperties();
factoryProps.profile = solace.SolclientFactoryProfiles.version10;
solace.SolclientFactory.init(factoryProps);

修改现有应用程序以使用新的行为配置文件时,应考虑配置文件之间的差异。

PubSub+ 消息 API使用
Java RTOSolclient.init(...)
CsolClient_initialize(...)
.NETContextFactory.Instance.Init(...)
JavaScript 和 Node.jssolace.SolclientFactory.init(...)

要初始化消息 API

相关示例

有关如何初始化 Java RTO 或 C API 的示例,请参阅该 API 的 DirectPubSub 示例。对于 .NET API,请参阅 SampleApp。对于 JavaScript 和 Node.js API,请参阅 TopicSubscriberTopicPublisher 示例。

清理

当客户端应用程序完成对 C API 或 .NET API 的使用时,应执行全局清理,这将自动释放所有已分配的资源,包括之前创建但未销毁的上下文和会话所分配的资源。

PubSub+ 消息 API使用
JCSMP不适用
Java RTO不适用
CsolClient_cleanup()
.NETContextFactory.Instance.Cleanup()
JavaScript 和 Node.js不适用

完成消息 API 使用后的清理

  • 在执行清理之前,应始终销毁或释放上下文和会话。如果在会话连接时调用 solClient_cleanup()ContextFactory.Cleanup(),则任何待传输的消息缓冲区将被丢弃且不会发送。

请注意,“初始化”和“清理”的调用是引用计数的。例如,如果“初始化”被调用两次,则必须调用两次“清理”以正确释放资源。

  • 在 .NET 环境中,.NET 垃圾回收器可能在应用程序调用 ContextFactory.Cleanup() 后尝试释放 IMessage 容器。这将导致出现类似“2012-08-07 19:11:50Z - Warn - Sdk:Bad msg_p pointer (0000000004000FE1) in solClient_msg_free”的警告。这些警告可以忽略,因为它们表明 API 已检测到并避免了双重释放。

然而,如果同一应用程序在 ContextFactory.Cleanup() 之后调用 ContextFactory.Init(),垃圾回收器可能会释放已重新分配给新初始化的 ContextFactory 的消息,这将导致应用程序崩溃。因此,建议您只调用一次 ContextFactory.Init()/ContextFactory.Cleanup()

相关示例

有关如何为 C API 执行全局清理的示例,请参阅 DirectPubSub 示例。对于 .NET API,请参阅随示例文件提供的 SampleUtils.cs