20.8.2. 对消息发送使用重复消息检测
要启用重复消息检测,您需要将消息上的一个特殊属性设置为唯一的值。您可以随意创建这个值,但它必须是唯一的。
当目标服务器接收到这个消息时,它会检查这个特殊属性是否已被设置。如果这个属性已设置,目标服务器将根据头部信息检查其内存缓存里的消息。如果服务器找到具有任何相同头部信息的消息,它将忽略这些客户发送的消息。
如果您发送事务里的消息,您不需要为每条消息设置属性;您只需要在事务里设置一次就可以了。如果服务器检测到事务里有重复的消息,它会忽略整个事务。
您设置的属性的名称是由
org.hornetq.api.core.HDR_DUPLICATE_DETECTION_ID
的值指定的,它是 _HQ_DUPL_ID
。对于 Core API,这个属性的值的类型可以是 byte[]
或 SimpleString
。对于 JMS 客户,它的类型必须是 String
且指定唯一的值。UUID 是生成唯一 ID 的简单途径。
下面的例子展示了如何为 Core API 设置这个属性:
... ClientMessage message = session.createMessage(true); SimpleString myUniqueID = "This is my unique id"; // Can use a UUID for this message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, myUniqueID); ...下面的例子展示了如何为 JMS 客户设置这个属性:
... Message jmsMessage = session.createMessage(); String myUniqueID = "This is my unique id"; // Could use a UUID for this message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID); ...