[英]Is there anything similar to Azure Service Bus Topics in Azure Event hubs?
我已經在具有2個分區(0和1)的Azure門戶中創建了一個事件中心。 因為在事件中心(如Service bus)中沒有主題的概念。 我正在嘗試使用以下方式將不同的數據存儲在分區0和分區1中
ehClient = EventHubClient.createFromConnectionStringSync(eventHubConnectionString.toString());
byte[] payload = "Storing data in partion 0".getBytes("UTF-8");
/** Storing data in partion 0*/
EventData data = new EventData(payload);
ehClient .send(data, "0");
即使我試圖將數據存儲在分區0中,默認情況下也會存儲在分區1中。
我的接收者邏輯是:
eventHubClient = EventHubClient.create(Constant.EVENTHUB_SASKEYNAME,
Constant.EVENTHUB_SASKEY, Constant.EVENTHUB_NAMESPACE, Constant.EVENTHUB_NAME);
EventHubConsumerGroup eventHubConsumerGroup = eventHubClient.getConsumerGroup("$Default");
eventHubReceiver = eventHubConsumerGroup.createReceiver("0", null, -1);
while (true) {
message = eventHubReceiver.receive(-1);
if (null != message)
System.out.println("The message that is delivered is : " + message.getPayload());
else
System.out.println("No message in the hub");
}
這是在分區中存儲數據的正確方法嗎? 我們可以使用與Azure Service bus主題等效的分區嗎?
對於您的標題問題,正如@PeterBons所說,EventHubs中沒有類似於Azure Service Bus Topic的東西。
根據您的描述和代碼,您想要通過使用EventHubClient.send(EventData, PartitionKey)
方法將事件數據發送到指定的分區。 但是,如您所見,第二個參數是PartitionKey
,而不是PartitionId
。 官方的API參考從此處如下所述,您的代碼按分區存儲數據是不正確的。
多個PartitionKey可以映射到一個分區。 EventHubs服務使用專有的哈希算法將PartitionKey映射到PartitionId。 使用這種類型的發送(使用特定的partitionKey發送)有時可能會導致分區分布不均。
請參考正式文檔, 其中,使用Java客戶端發布事件以用於Azure事件中心 ,使用消費事件使用Java客戶端來用於Azure事件中心,以創建PartitionSender
和PartitionReceiver
來向/從指定分區發送/接收事件數據,如下所示。
對於PartitionSender
:
String partitionId = "0";
EventHubClient ehClient = EventHubClient.createFromConnectionString(str).get();
EventHubSender sender = ehClient.createPartitionSender(partitionId).get();
EventData sendEvent = new EventData(payloadBytes);
sender.send(sendEvent).get();
對於PartitionReceiver
:
String partitionId = "0"; // API to get PartitionIds will be released soon
PartitionReceiver receiver = ehClient.createReceiver(
EventHubClient.DefaultConsumerGroupName,
partitionId,
PartitionReceiver.StartOfStream,
false).get();
我不知道為什么要使用等同於Azure Service總線主題的分區。 只要按我的經驗,解決辦法的方式來模擬Azure的服務總線主題的行為是添加屬性類似topic
使用JSON格式的事件數據中,和過濾及內調度數據topic
在接收時財產。
希望能幫助到你。 如有任何疑問,請隨時告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.