跳到主要内容

在PubSub+消息API中管理消息

以下部分讨论了在使用 PubSub+ 消息 API 时如何管理消息。

  • 获取消息属性
  • 设置消息属性
  • 复制消息
  • 显示消息
  • 释放消息

获取消息属性

客户端可以在消息发布之前从已创建的消息中获取消息属性,也可以从 API 从事件代理接收的消息中获取消息属性。

有关可以检索的消息属性的完整列表,请参阅 PubSub+ 消息 API 部分中的相应 API。

某些消息属性(如过期时间、TTL 和死信队列资格)仅在与保证消息一起使用时才有效。有关更多信息,请参阅相关 API 参考文档。

PubSub+ 消息 API使用方法
Java RTO所有 MessageHandle.get*() 方法。例如:
  • MessageHandle.getApplicationMessageType()
  • MessageHandle.getDeliveryCount()
  • MessageHandle.getSenderId()
    有关完整的方法列表,请参阅 PubSub+ 消息 API Java RTO 参考。 | | C | 所有 solClient_msg_get*(...) 函数。例如:
  • solClient_msg_getApplicationMsgType(solClient_opaqueMsg_pt msg_p, const char **msgType_p)
  • solClient_msg_getDeliveryMode(solClient_opaqueMsg_pt msg_p, solClient_uint32_t *mode_p)
  • solClient_msg_getSenderId(solClient_opaqueMsg_pt msg_p, const char **buf_p)
    有关完整的方法列表,请参阅 PubSub+ 消息 API C 参考。 | | .NET | 所有 IMessage.Get*() 方法。例如:
  • IMessage.GetBinaryAttachment()
  • IMessage.GetDestinationTopicSuffix()
  • IMessage.GetUserData()
    有关完整的方法列表,请参阅 PubSub+ 消息 API .NET 参考。 | | JavaScript 和 Node.js | 所有 solace.Message.get*() 函数。例如:
  • solace.Message.getApplicationMessageType()
  • solace.Message.getDeliveryMode()
  • solace.Message.getSenderId()
    有关完整的方法列表,请参阅 PubSub+ 消息 API JavaScript 参考。 |

如何获取消息属性

设置消息属性

客户端可以在消息发布之前为已创建的消息设置消息属性,也可以为 API 从事件代理接收的消息设置消息属性。

有关可以设置的消息属性的完整列表,请参阅 PubSub+ 消息 API 部分中的相应 API。

某些消息属性(如过期时间、TTL 和死信队列资格)仅在与保证消息一起使用时才有效。有关更多信息,请参阅相关 API 参考文档。

PubSub+ 消息 API使用方法
Java RTO所有 MessageHandle.set*() 方法。例如:
  • MessageHandle.setApplicationMessageType(java.lang.String appMsgType)
  • MessageHandle.setCorrelationId(java.lang.String correlationId)
  • MessageHandle.setSenderId(java.lang.String senderId)
    有关完整的方法列表,请参阅 PubSub+ 消息 API Java RTO 参考。 | | C | 所有 solClient_msg_set*() 函数。例如:
  • solClient_msg_setApplicationMsgType(solClient_opaqueMsg_pt msg_p, const char *msgType)
  • solClient_msg_setDeliveryMode(solClient_opaqueMsg_pt msg_p, solClient_uint32_t mode)
  • solClient_msg_setSenderId(solClient_opaqueMsg_pt msg_p, const char *buf_p)
    有关完整的方法列表,请参阅 PubSub+ 消息 API C 参考。 | | .NET | 所有 IMessage.Set*() 方法。例如:
  • IMessage.SetBinaryAttachment(sbyte[] binaryAttachment)
  • IMessage.SetUserData(sbyte[] userData)
  • IMessage.SetXmlContent(sbyte[] xmlContent)
    有关完整的方法列表,请参阅 PubSub+ 消息 API .NET 参考。 | | JavaScript 和 Node.js | 所有 solace.Message.set*() 函数。例如:
  • solace.Message.setApplicationMessageType(String value)
  • solace.Message.setDeliveryMode(solace.MessageDeliveryModeType value)
  • solace.Message.setSenderId(String value)
    有关完整的方法列表,请参阅 PubSub+ 消息 API JavaScript 参考。 |

如何设置消息属性

复制消息

当使用 C API 时,客户端可以复制消息缓冲区,这会分配一个新消息,该消息引用与原始消息相同的数据。您可以复制已创建的消息或接收的消息。

数据会进行引用计数,以表明两个消息缓冲区都指向该数据。

PubSub+ 消息 API使用方法
Java RTO不适用
CsolClient_msg_dup(...)
.NET不适用
JavaScript 和 Node.js不适用

如何复制消息

显示消息

您可以使用消息转储工具以人类可读的形式显示消息的内容。此工具方法或函数作为编程辅助工具,便于开发和测试消息应用程序。您可以显示已创建的消息或接收的消息的内容。

PubSub+ 消息 API使用方法
Java RTOMessageHandle.dump(...)
CsolClient_msg_dump(...)
.NETIMessage.Dump()
JavaScript 和 Node.jsSolace.Message.dump()

如何显示消息内容

生成的输出格式为:

<字段>:<值>

例如,消息的一部分(如消息头字段 SenderId)显示为:

SenderId:mySenderID

如果消息中存在消息的一部分,但其内容为空或为空字符串,则会显示该字段(例如 SenderID:),但没有值。如果消息中不存在某一部分,则不会为该部分生成输出。例如,如果没有 SenderId 头字段,则不会生成 SenderId 字段或值。

释放消息

当使用 Java RTO、C 或 .NET API 时,客户端在完成消息处理后应释放消息,以便释放分配给消息的内存。客户端应在发布后释放出站消息,并在完成处理后释放入站消息。

以下列出的调用成功返回后,被释放消息引用的内存将不再有效。

PubSub+ 消息 API使用方法
Java RTO客户端可以调用 MessageHandle.takeRxMessage() 来获取回调中接收到的消息的所有权。在这种情况下,客户端必须在不再需要时释放消息。
MessageHandle.destroy()
C通常,客户端不需要释放从回调中接收到的任何消息。但是,为了在回调中获取消息的所有权,客户端可以返回 SOLCLIENT_CALLBACK_TAKEMSG 给 API。在这种情况下,客户端必须在不再需要时释放消息。
solClient_msg_free(solClient_opaqueMsg_pt *msg_p)
.NETDispose()
JavaScript 和 Node.js不适用

如何释放消息