所以我得到這個異常:如何在使用Azure Eventhub時檢查Payload大小並避免PayloadSizeExceededException?
com.microsoft.azure.servicebus.PayloadSizeExceededException: Size of the payload exceeded Maximum message size: 256 kb
我相信例外是自我解釋,但是,我的不知道該怎麼辦纔好。
private int MAXBYTES = (int) ((1024 * 256) * .8);
for (EHubMessage message : payloads) {
byte[] payloadBytes = message.getPayload().getBytes(StandardCharsets.UTF_8);
EventData sendEvent = new EventData(payloadBytes);
events.add(sendEvent);
byteCount += payloadBytes.length;
if (byteCount > this.MAXBYTES) {
calls.add(ehc.sendASync(events));
logs.append("[Size:").append(events.size()).append(" - ").append(byteCount/1024).append("kb] ");
events = new LinkedList<EventData>();
byteCount = 0;
pushes++;
}
}
我正在計算字節等。我已經想通過UTF-8的東西,但我認爲這應該不重要。 UTF-8可以多於一個字節,但應該用「getBytes」正確計數。
我找不到一個可靠的方式來獲取字符串中的字節,我甚至不知道Azure如何計算字節。 「有效載荷」是一個廣泛的聲明。可以包括樣板材料等。
任何想法?如果有一個
EventHubClient.checkPayload(list);
方法,但似乎沒有。你們如何檢查有效載荷大小?
使用'SerializedSizeInBytes'屬性,請參閱https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.eventdata.serializedsizeinbytes?view=azureservicebus-4.0.0。 –
@PeterBons看起來像是關於Java SDK的問題... – Mikhail
你們知道這是否使用JSON傳輸數據?我想知道是否JSON化整個EventData對象,如果這會給我答案。 – markthegrea