2016-11-16 4 views
1

Я строй сообщения на основе веб-приложение, которое предполагает представить акции котировки в реальное время,Динамического изменения очередей и маршрутизация ключей, RabbitMQ

Я выбрал RabbitMQ как мое сообщение автобус, у меня есть один обмен, который принимает потоки цитаты из нескольких поставщиков ликвидности и направлять их в соответствующие очереди в соответствии с ключом маршрутизации. Затем цитата анализируется и отображается на соответствующем виджете на экране.

Это биржа и очередей структура -

| 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) 

Какой путь будет самым быстрым?

Безопасный?

Будет ли у меня меньше данных?

Если у вас есть какие-либо комментарии по поводу того, как я смоделировал ключи очереди и маршрутизации, я буду рад услышать это.

Благодаря Ahead

+0

Рассматривали ли вы другие среды, такие как http://zeromq.org/? – vtortola

ответ

0

Оба варианта вы упоминаете приведет к потере данных для вас. Я бы посоветовал вам либо следовать подходу 2 (где вы снова отвязываете и связываете). Другой способ сделать это - создать новую очередь и связать эту очередь с новым ключом маршрутизации на обмен, а затем удалить существующую очередь и привязку.

0

Другой вариант - сохранить свою Widget1Id очередь и связать ее во второй раз с обменом с помощью ключа маршрутизации S&P500.ACN.200. Таким образом, Widget1Id получит сообщения для обоих ключей маршрутизации. Когда вы будете готовы, вы можете удалить предыдущую привязку.

Вы не потеряете сообщения, уже поставленные в очередь в Widget1Id, и вы не потеряете сообщения, опубликованные между моментом, когда вы отвязываете/переписываете или воссоздаете очередь.

Этот сценарий приведен в документе Tutorial 4 в документации RabbitMQ, если вы хотите получить более конкретный пример.

Смежные вопросы