У меня есть приложение, в которое я отправляю сообщения через подписки Stomp. Когда сообщения получены, они отправляют кадр ACK. Я хотел бы обработать этот ack-фрейм на стороне сервера, и у меня есть вопрос, есть ли какой-нибудь ack-слушатель в rabbitmq или ack-обработчик, который будет принимать этот фрейм и его заголовки? Я хочу получить доступ к этому кадру, чтобы отправить производителю подтверждение того, что сообщение получено.
stompClient.subscribe('/topic/'+ thread, function (greeting) {
var divId = "#userinfo";
console.log("SENDING TO TOPIC/GREETING")
showGreeting(divId, JSON.parse(greeting.body).person,
JSON.parse(greeting.body).message);
greeting.ack();
}, {id: thread, ack:'client'});
@MessageMapping("/message")
public MessageTemplate send(MessageTemplate messageTemp) throws Exception {
MessageTemplate message = new MessageTemplate(messageTemp.getPerson(), messageTemp.getMessage(), messageTemp.getTo());
rabbitTemplate.convertAndSend("amq.topic", messageTemp.getTo(), message);
return message;
}
<<< MESSAGE
subscription:other
destination:/topic/other
message-id:T_other@@session-8-X11WtIiVQr-7UcONamng@@3
redelivered:false
__TypeId__:com.patrykmaryn.spring.second.springsecond.MessageTemplate
priority:0
persistent:true
content-encoding:UTF-8
content-type:application/json
content-length:46
>>> ACK
message-id:T_other@@session-8-X11WtIiVQr-7UcONamng@@3
subscription:other
РЕДАКТИРОВАТЬ
Я думал, что смогу использовать
@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
registration.interceptors(inBoundInterceptor);
}
И затем в
public class InboundMessagesChannelInterceptor implements ChannelInterceptor {
@Override
public Message<?> preSend(Message<?> message, MessageChannel messageChannel) {
// here's some logic to do with ACK frame like sending a
// notifiction message to the sender
return message;
}
}
Однако метод перехватывает каждое входящее событие, но мне нужно только сообщение ACK. В таком случае, как я могу получить только заголовки кадра ACK?