Spring RabbitMq - Queue创建的事件监听器

时间:2017-03-09 10:20:44

标签: java spring events listener 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 个答案:

答案 0 :(得分:0)

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

请参阅AbstractConnectionFactory.addConnectionListener