2017-09-21 81 views
1

我已設置Azure事件中心。有2出版商Azure事件中心 - 同一個事件中心中的多個事件類型

  1. 出版商1(與發送政策)

  2. 出版商2(與發送政策)

出版商1將發送事件1發佈者2將發送事件2.事件1 &事件2是不同的格式。

問題1:這意味着我們在EH中有不同的信息 - 這種方法有什麼折衷?我應該改爲創建2個EH(一個用於發佈商1,另一個用於發佈商2)?最佳實踐和設計理念是什麼?

如果我採用上述方法,我將不得不設置消費者Listen策略查找這些事件並解析/轉換這些事件並對這些事件進行反序列化。

問題2:我需要2位消費者(消費者1和消費者2)閱讀專爲他們設計的消息嗎? (消費者1將只讀事件1,消費者2將只讀事件2)?

回答

2

情景1:一個事件樞紐多個事件類型

在這種情況下,你有多種選擇,當談到發送和處理消息:

  1. 只是將消息發送到事件中心。編寫一個讀取消息的消費過程,並根據類型處理它們的不同。
  2. 只需將消息發送到事件中心。創建不同的消費者羣組,每個消息類型一個。有兩個進程都讀取他們自己的消費者組,並跳過他們沒有資格處理的消息。 (每個消費者組讀取相同的數據,但他們可能位於數據流的不同位置)。請參閱Azure event hubs and multiple consumer groups
  3. 將消息發送到指定的分區。例如,將類型A的消息發送到分區1,並將類型B的消息發送到分區2.但這會影響事件集線器的可伸縮性。爲每個(一組)分區創建專用進程。每個進程將只處理相同類型的消息。見https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-programming-guide#partition-keyhttps://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-programming-guide#create-a-partition-sender

方案2:每個事件類型的事件樞紐

這一個是容易的,只需創建2個事件中心和2點耗時的過程。但是你必須管理2個事件中心,並且考慮到事件中心的能力,這可能是過度的。

我的建議

這取決於數據量,但根據我的經驗,我會去發送的所有郵件的一個活動中心,並有一個進程讀取消息,並基於該行動消息類型使用一些C#代碼。

+0

謝謝@彼得邦森 - 這是超級有用的 - 你讀我的思想:)。如果我們使用場景#1和選項2(_創建1個EH_的不同消費者組),看起來我必須**跳過許多不適合消費者羣體的消息。這裏有**性能折衷**嗎?此外,EH基於**吞吐量單位(TU)**,如果使用此選項(或任何選項),將如何影響** ** TU是否會受到影響**? – khar

+0

正確,您需要跳過消費羣組中的消息。關於TU,我們在談論什麼消息和每條消息的大小?我們每秒有數百個事件進入,但仍然使用1個TU,所以我不會擔心這一點。現在,我不是EH中的TU /結算專家,但對我來說,當您決定選擇所選選項時,您似乎沒有獲取更多數據。 –

+0

謝謝彼得。我預計每秒會發生大約50個事件,因此不確定哪種方法能夠在不影響性能的情況下實現最佳效果。TU – khar

相關問題