Websocket 动态更改队列和路由密钥,RabbitMQ

Websocket 动态更改队列和路由密钥,RabbitMQ,websocket,queue,rabbitmq,amqp,stomp,Websocket,Queue,Rabbitmq,Amqp,Stomp,我正在构建一个基于消息的web应用程序,该应用程序假定能够实时显示股票报价 我选择RabbitMQ作为我的消息总线,我有一个单一的交换,它从几个流动性提供者获取报价流,并根据路由密钥将它们路由到相应的队列。 然后对报价进行解析并显示在屏幕上的相关小部件上 这是Exchange和队列结构- | exchange | type | routing key | queue | |-----------------------------------

我正在构建一个基于消息的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          |
所以。。 当我想将队列Widget1Id的路由密钥更改为s&P500.ACN.200时,问题就开始了

我考虑过几个选择:

1. Delete Widget1Id queue and recreate is.
2. Unbind the queue and bind it again using the new routing key
  (makes me always save the old routing key)
哪条路最快

最安全的

会让我丢失更少的数据吗

如果您对我建模队列和路由密钥的方式有任何评论,我很乐意听到


提前感谢

您提到的两个选项都将导致您的数据丢失。我建议您要么遵循方法2(即解除绑定并再次绑定)。另一种方法是创建一个新队列,并使用新的路由密钥将该队列绑定到exchange,然后删除现有队列及其绑定。

您提到的两个选项都将导致您的数据丢失。我建议您要么遵循方法2(即解除绑定并再次绑定)。另一种方法是创建一个新队列,并使用新的路由密钥将该队列绑定到exchange,然后删除现有队列及其绑定。

另一种方法是保留您的
Widget1Id
队列,并再次使用
S&P500.ACN.200
路由密钥将其绑定到exchange。这样,
Widget1Id
将接收两个路由密钥的消息。准备好后,可以删除以前的绑定

您不会丢失已在
Widget1Id
中排队的消息,也不会丢失在解除绑定/重新绑定或重新创建队列之间发布的消息


如果您想要一个更具体的示例,RabbitMQ文档中将介绍此场景。

另一个选项是保留您的
Widget1Id
队列,并使用
S&P500.ACN.200
路由密钥再次将其绑定到exchange。这样,
Widget1Id
将接收两个路由密钥的消息。准备好后,可以删除以前的绑定

您不会丢失已在
Widget1Id
中排队的消息,也不会丢失在解除绑定/重新绑定或重新创建队列之间发布的消息


如果您想要一个更具体的示例,RabbitMQ文档中会介绍此场景。

您考虑过类似的其他框架吗?您考虑过类似的其他框架吗?