Java JMS将相同的消息发送回SQS
我正在研究一种方法,要求我向SQS发送一条消息。 我不希望它成为新消息,因为这将重置代码所需的近似ReceiveCount参数。Java JMS将相同的消息发送回SQS,java,amazon-sqs,spring-jms,Java,Amazon Sqs,Spring Jms,我正在研究一种方法,要求我向SQS发送一条消息。 我不希望它成为新消息,因为这将重置代码所需的近似ReceiveCount参数。 请注意 我无法向队列发送NACK,因为我正在以一批10条消息的形式读取NACK,在某些情况下,我希望手动将其发回单个消息,而不是以一批消息的形式。 我正在尝试使用的代码 我尝试设置JMSMessageId,但根据文档,这是不可能的- 发送消息后,Amazon SQS为每条消息设置以下标题和属性: JMSMessageID JMS_SQS_SequenceNumber
请注意 我无法向队列发送NACK,因为我正在以一批10条消息的形式读取NACK,在某些情况下,我希望手动将其发回单个消息,而不是以一批消息的形式。 我正在尝试使用的代码 我尝试设置JMSMessageId,但根据文档,这是不可能的- 发送消息后,Amazon SQS为每条消息设置以下标题和属性:
defaultJmsTemplate.send(destinationName, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
Message message = session.createTextMessage(errorMessage);
message.setJMSCorrelationID(transactionId);
if (destinationName.endsWith(".fifo")) {
message.setStringProperty("JMSXGroupID", property.getMessageGroup());
message.setStringProperty("JMS_SQS_DeduplicationId", java.util.UUID.randomUUID().toString());
}
return message;
}
});
}
是否有什么可以设置/使用的方法来确保该消息不被视为新消息,并且保持大致的接收计数?是。这是可以做到的。当您在设置消费者时使用JMS for SQS时,您可以在消费者会话中定义
无序确认
模式。这样做,如果您不确认某个特定消息,则该消息将在其可见性超时过期后重新发送,并且近似ReceiveCount
将增加。这不会影响同一批中的其他邮件。这样做的一个缺点是,如果您使用的是fifo队列,并且您的所有消息都具有相同的组id,那么只有在未确认的消息在死信队列中结束后,才会处理下一条消息。只有在对您在fifo队列配置中设置的最大接收次数
重试消息后,才会发生这种情况。注意:这里的关键是不要确认某一特定消息。是。这是可以做到的。当您在设置消费者时使用JMS for SQS时,您可以在消费者会话中定义无序确认
模式。这样做,如果您不确认某个特定消息,则该消息将在其可见性超时过期后重新发送,并且近似ReceiveCount
将增加。这不会影响同一批中的其他邮件。这样做的一个缺点是,如果您使用的是fifo队列,并且您的所有消息都具有相同的组id,那么只有在未确认的消息在死信队列中结束后,才会处理下一条消息。只有在对您在fifo队列配置中设置的最大接收次数
重试消息后,才会发生这种情况。注意:这里的关键是不要确认特定消息