diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java index 70303bc5d5c..0f304e6603f 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java @@ -328,12 +328,19 @@ public class DefaultStompSession implements ConnectionHandlingStompSession { stompHeaders.setId(messageId); } - String receiptId = checkOrAddReceipt(stompHeaders); + Receiptable receiptable = acknowledge(stompHeaders, consumed); + + return receiptable; + } + + @Override + public Receiptable acknowledge(StompHeaders headers, boolean consumed) { + String receiptId = checkOrAddReceipt(headers); Receiptable receiptable = new ReceiptHandler(receiptId); StompCommand command = (consumed ? StompCommand.ACK : StompCommand.NACK); StompHeaderAccessor accessor = createHeaderAccessor(command); - accessor.addNativeHeaders(stompHeaders); + accessor.addNativeHeaders(headers); Message message = createMessage(accessor, null); execute(message); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java index 9e854c86527..6882c681100 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java @@ -101,6 +101,19 @@ public interface StompSession { */ Receiptable acknowledge(String messageId, boolean consumed); + /** + * Send an acknowledgement whether a message was consumed or not resulting + * in an ACK or NACK frame respectively. + *

Note: to use this when subscribing you must set the + * {@link StompHeaders#setAck(String) ack} header to "client" or + * "client-individual" in order ot use this. + * @param headers the headers for the ACK or NACK frame + * @param consumed whether the message was consumed or not + * @return a Receiptable for tracking receipts + * @since 5.1 + */ + Receiptable acknowledge(StompHeaders headers, boolean consumed); + /** * Disconnect the session by sending a DISCONNECT frame. */