我正在构建一个基于消息的Web应用程序,它假设实时显示股票报价,
我选择RabbitMQ作为我的消息总线,我有一个交换机,它接收来自几个流动性提供商的报价流,并根据路由密钥将它们路由到相应的队列。然后,报价将被解析并显示在屏幕上的相关小部件上。
这是Exchange和队列结构 -
| exchange | type | routing key | queue |
|------------------------------------------------------------------|
| quotes | topic | NASDAQ.MSFT.500 | Widget1Id |
| quotes | topic | NASDAQ.FB.1500 | Widget2Id |
| quotes | topic | S&P500.ABT.200 | Widget3Id |
| quotes | topic | S&P500.MMM.200 | Widget4Id |
| quotes | topic | S&P500.MMM.500 | Widget5Id |
队列是自动删除的,所以当我将其中一个小部件更改为另一个路由键时,旧队列就会死掉。
但是当我想重新订阅旧队列时,我收到了错误。
即 -
widget1订阅队列NASDAQ.MSFT.500,现在用户想要更改设置并获得NASDAQ.FB.1500,因此widget1取消订阅NASDAQ.MSFT.500并订阅NASDAQ.FB.1500。
直到现在一直很好,
如果widget1想再次订阅NASDAQ.MSFT.500,我总是收到错误:
"NOT_FOUND - no queue 'NASDAQ.MSFT.500' in vhost '/'↵"
这是假设发生了吗?
是否无法重新订阅已删除的队列?
我不应该删除队列吗?
P.S - 我使用StompJs作为我的框架来消费来自队列的消息。