我想知道在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.
}
答案 0 :(得分:0)
没有发布任何事件,但您可以向ConnectionListener
添加第二个CachingConnectionFactory
。如果确保在RabbitAdmin
之后添加它,则可以确保在管理员声明了所有交换,队列,绑定之后将调用onCreate()
方法。
请参阅AbstractConnectionFactory.addConnectionListener
。