Spring RabbitMq - слушатель событий, созданный в очереди
Я хотел бы знать, если какие-либо события публикуются, когда queue
на самом деле физически создан в Rabbitmq
с помощью Spring Api
,
Причина, по которой я спрашиваю, так или иначе, у нас есть состояние гонки. Подписка на queue
как-то обычно занимает больше времени, и в то время как подписка уже происходит, сообщение отправляется в эту очередь из BE, и в результате очередь не присутствует в Rabbitmq
и сообщение потеряно и никогда не достигает FE.
Извините, я не могу предоставить какой-либо код как таковой, потому что он не имеет большого смысла, помещая небольшой фрагмент кода.
Но я уверен, проблема в том, что из-за состояния гонки сообщение в очередь отправляется еще до его создания. Так что, если есть некоторые event listener
Я мог слушать после создания очереди, я мог переместить свою логику в этот метод.
Вот кусок кода,
stomp-client.js
stompClient.subscribe(destination, function(msg) {});
WebsocketConnectionListener.java
@EventListener
public void handleWebSocketSessionSubscribeEvent(final SessionSubscribeEvent event) {
// here I think this event is fired before the queue is actual created
// this event is fired when u send subscription from stomp-client.js
...
...
...
// trying to send message to this subscribed queue
simpMessagingTemplate.convertAndSend(TOPIC_PREFIX + destination, data, headers);
// now this message is lost as sometimes the queue creation takes longer.
// unfortunately I want to move the convert and send method, when I could listen to queue created event.
}
1 ответ
Событие не опубликовано, но вы можете добавить второе ConnectionListener
к CachingConnectionFactory
, Если вы убедитесь, что он добавлен после RabbitAdmin
Вы можете быть уверены, что onCreate()
Метод будет вызван после того, как администратор объявил все обмены, очереди, привязки.
Увидеть AbstractConnectionFactory.addConnectionListener
,