2017-02-10 55 views
0

我使用PUSH套接字向通過PULL接收的工作人員發送消息,因此消息在工作人員中均勻分佈。不過,我想用一些工作人員來處理特定的消息。在PUSH/PULL方法中,每個工人都沒有特別的待遇,他們都是平等的。我雖然使用PUB/SUB,但由於過濾器,但沒有辦法自動分發給工人。如果一組工人要處理消息A,他們都會收到。這不好。是否可以用PUB/SUB來拉一個ZeroMQ PUSH套接字但使用過濾器?

完美的方法是對於一組工人能夠只對他們提供PULL消息,而對B設置B PULL消息。例如,我可以爲A組和另一個組設置一個端口,集合B,但是對於單個套接字來說,這種解決方案會非常優雅,我也沒有看到開發人員無法完成的原因。

有沒有辦法用現有的ZeroMQ版本來做?

其基本思想是:只需一個PULL,它可以發送封裝的消息(就像在PUB中一樣),工作人員可以用這個信封拉PULL消息。看到工作人員可以拉出每條信息,看看它是否適合他們,但這需要額外的處理和重播廣播收到的信息,以免丟棄。

回答

0

本質上,我認爲你將不得不自己實現這個功能。我想它看起來像這樣...

像普通一樣實施PUSH/PULL架構。但是,如果一個工作人員得到了一條不能處理的消息,它就會向源發回一條消息,告訴它將該消息提供給下一個工作人員。這將基本上持續發生,直到消息到達可以處理消息的工作人員。要做到這一點,您需要有一種方法來將消息發回給源,讓其知道您是否可以處理消息。爲此,您可以查看ROUTER/DEALER體系結構,或者將源設置爲SUB,以偵聽來自工作人員的消息,指示他們是否可以/不能處理消息。

0

你可以這樣做:

PUB原始消息到兩個子(A/B),該過濾器適當的消息。然後,可以將這兩個SUB插座連接到發送給相應的PULL工作人員的兩個PUSH插座。

我在生產中使用這種模式,它運作良好。

相關問題