2016-11-16 5 views
1
내가 주식을 제시 가정한다 실시간으로 인용 메시지 기반의 웹 응용 프로그램을 구축하고

을 변경 여러 유동성 공급자로부터 따옴표를 받고 라우팅 키에 따라 해당 대기열로 라우팅합니다. 그러면 견적이 파싱되어 화면의 관련 위젯에 표시됩니다.동적으로 내 메시지 버스로 RabbitMQ를 선택 <p></p>, 나는 스트림 소요 하나의 교환이 대기열 및 라우팅 키, RabbitMQ

이 Exchange 및 큐 구조 - 문제는 내가 큐의 라우팅 키를 변경하고자 할 때 시작의는 S & P500.ACN.200

을 말할 수 있도록 Widget1Id ..

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

그래서

내가 생각 한 몇 가지 옵션 :

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) 

가장 빠른 것입니다 방법은?

Safest?

데이터가 줄어 듭니다?

내가 대기열과 라우팅 키를 모델링 한 방식에 대한 의견이 있으시면 그 내용을 듣고 싶습니다.

고마워 서

+0

http://zeromq.org/와 같은 다른 프레임 워크를 고려 했습니까? – vtortola

답변

0

두 옵션을 사용하면 데이터가 손실됩니다. 나는 당신이 접근법 2를 따를 것을 제안한다. 또 다른 방법은 새 대기열을 만들고 해당 대기열을 새 라우팅 키로 교환기에 바인딩 한 다음 나중에 기존 대기열과 그 바인딩을 삭제하는 것입니다.

0

다른 옵션은 Widget1Id 대기열을 유지하고 두 번째로 S&P500.ACN.200 라우팅 키를 사용하여 교환기에 바인딩하는 것입니다. 이렇게하면 Widget1Id 두 라우팅 키 모두에 대한 메시지가 수신됩니다. 준비가되면 이전 바인딩을 제거 할 수 있습니다.

이미 Widget1Id에 대기중인 메시지를 풀지 않으며 바인드 해제/재 바인드 또는 큐를 다시 생성하는 사이에 게시 된 메시지를 풀지 않습니다.

보다 구체적인 예를 보려면이 시나리오는 RabbitMQ 문서의 Tutorial 4에 나와 있습니다.