Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring RabbitMq-队列创建的事件侦听器_Java_Spring_Events_Listener_Spring Rabbit - Fatal编程技术网

Java Spring RabbitMq-队列创建的事件侦听器

Java Spring RabbitMq-队列创建的事件侦听器,java,spring,events,listener,spring-rabbit,Java,Spring,Events,Listener,Spring Rabbit,我想知道当通过springapi在Rabbitmq中实际创建队列时,是否发布了任何事件 我问这个问题的原因是,不知何故,我们有比赛条件。队列的订阅通常会花费更长的时间,并且当订阅已经发生时,会从BE向该队列发送一条消息,因此队列在Rabbitmq中不存在,消息会丢失,并且永远不会到达FE 很抱歉,我不能提供任何这样的代码,因为放一小段代码没有多大意义 但我很确定,问题是由于某种竞争条件,甚至在创建队列之前,就已经向队列发送了消息。因此,如果在创建队列后有一些事件侦听器我可以侦听,我可以将逻辑移到

我想知道当通过
springapi
Rabbitmq
中实际创建
队列时,是否发布了任何事件

我问这个问题的原因是,不知何故,我们有比赛条件。
队列
的订阅通常会花费更长的时间,并且当订阅已经发生时,会从BE向该队列发送一条消息,因此队列在
Rabbitmq
中不存在,消息会丢失,并且永远不会到达FE

很抱歉,我不能提供任何这样的代码,因为放一小段代码没有多大意义

但我很确定,问题是由于某种竞争条件,甚至在创建队列之前,就已经向队列发送了消息。因此,如果在创建队列后有一些
事件侦听器
我可以侦听,我可以将逻辑移到这个方法

这是一段代码

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.

 }

没有发布任何事件,但您可以向
CachingConnectionFactory
添加第二个
ConnectionListener
。如果您确保它是在
RabbitAdmin
之后添加的,那么可以确保
onCreate()
方法将在管理员声明所有交换、队列和绑定后调用


请参阅
AbstractConnectionFactory.addConnectionListener

我明白你的意思,但并非所有队列都是在服务器启动时创建的。大多数队列是通过从前端发送订阅动态创建的。据我所知,这个新创建的侦听器不会收到您稍后创建/订阅的每个队列的通知,或者我是错的。不清楚您的意思-如果您自己动态创建队列,那么您将知道它们是创建的-这些操作是阻塞的-而不是异步的-使用
RabbitAdmin.declareQueue(队列)