第 25 章 配置重复数据删除消息检测
当发送者向另一服务器发送消息时,目标服务器或连接在发送消息后会失败,但在向发件人发送响应之前,指示进程成功之前。在这些情况下,发件人很难确定消息是否已成功发送到预期的接收器。如果发送方决定重新发送最后一个邮件,则可能会导致向地址发送重复的消息。
您可以在 JBoss EAP 消息传递中配置重复的消息检测,以便您的应用无需提供过滤重复消息的逻辑。
25.1. 将重复数据删除消息检测用于发送消息 复制链接链接已复制到粘贴板!
要为发送的消息启用重复的消息检测,您需要将 org.apache.activemq.artemis.api.core.Message.HDR_DUPLICATE_DETECTION_ID 属性的值解析为 _AMQ_DUPL_ID 属性。当目标服务器收到消息时,如果设置了 _AMQ_DUPL_ID 属性,它将检查其内存缓存,以查看它是否收到了具有该标头值的消息。如果存在,则忽略此消息。如需更多信息 ,请参阅配置重复 ID 缓存。
如果您使用核心 API,_AMQ_DUPL_ID 属性的值可以是 字节[] 或 SimpleString。如果您使用的是 Jakarta Messaging,它必须是一个 String。
以下示例演示了如何为核心 API 设置 属性。
SimpleString myUniqueID = "This is my unique id"; // Can use a UUID for this ClientMessage message = session.createMessage(true); message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, myUniqueID);
SimpleString myUniqueID = "This is my unique id"; // Can use a UUID for this
ClientMessage message = session.createMessage(true);
message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, myUniqueID);
以下示例演示了如何为 Jakarta 消息传递客户端设置 属性。
String myUniqueID = "This is my unique id"; // Can use a UUID for this Message jmsMessage = session.createMessage(); message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID);
String myUniqueID = "This is my unique id"; // Can use a UUID for this
Message jmsMessage = session.createMessage();
message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID);
当使用 HDR_DUPLICATE_DETECTION_ID 属性在同一事务中发送重复消息时,不会 检测到重复消息。