2016-07-06 37 views
0

我需要發送一些數據到eventhub,但它沒有經過,因爲它的大小太大。有沒有辦法壓縮數據或某些命令來分割數據並將其加入事件中心? 我使用下面的Java代碼來發送:發送EventData到Azure Eventhub大於256k

EventData sendEvent = new EventData(payloadBytes); 
EventHubClient ehClient = EventHubClient.createFromConnectionStringSync(connStr.toString()); 
ehClient.sendSync(sendEvent); 

什麼是我的選擇,如果payloadBytes太大?

+0

你如何發送數據?你使用SendBatchAsync嗎?或者單個事件已經太大了?使用Event Hub發送大量重要消息是沒有意義的。 –

+0

我正在使用EventData sendEvent = new EventData(payloadBytes); EventHubClient ehClient = EventHubClient.createFromConnectionStringSync(connStr.toString()); ehClient.sendSync(sendEvent);有沒有方法SendBatchAsync,我可以使用批量發送消息? – Aparna

+3

是的,請參閱https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.eventhubclient.sendbatchasync.aspx,但它可能不會幫助您,因爲單個payloadBytes已經大於256 KB。您將不得不減少有效負載或將其分成多個事件(然後可以使用SendBatchAsync發送以提高性能)。沒有辦法爲你做這件事(壓縮或分裂),你必須自己寫。 –

回答

0

您能描述一下您的用例以及您要發佈什麼類型的數據,它有助於找到正確的解決方案。以下是我在項目中使用的一些常用選項。

  • 活動中心是專爲,因爲它是描述here事件流:

    有些顧慮到設計系統,需要消息代理或事件流時記住。當你有大量的事件時,它的規模很好。

  • 每條消息的256KB限制比傳輸事件通常需要的更多,這通常是基於文本的事件。

在我的項目我有兩個不同的使用情況下,當256K是不夠的,這裏是我如何解決它:

  1. 我們需要後來發佈我們的單片系統的內部事件出來可以在我們的微服務之外使用。大多數情況下,這些消息很小,但有時它們會比256K略大,修復起來很容易,我們會在發佈前壓縮它們,然後將它們解壓縮到接收器。你可以找到一個很好的樣品here

  2. 在第二種情況下,消息比256K壓縮不夠,我所做的是首先創建一個包含該內容的blob,然後用該blob的引用發佈事件,然後您的事件接收器可以獲得blob的內容,不管它有多大。

它應該涵蓋大部分用例,但讓我更多地瞭解您的問題,如果它對您沒有用處。

+0

謝謝你的回答。我的用例是收集來自設備的遙測數據。這個zip不起作用,因爲我在eventhub之後也有一個數據流分析查詢,然後去找權力。也許eventhub不是正確的工具..而是嘗試IOThub。 – Aparna

+0

IOThub在引擎蓋下使用了一個eventhub –