簡體   English   中英

Azure事件中心中是否有類似於Azure Service Bus主題的內容?

[英]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所說,Eve​​ntHubs中沒有類似於Azure Service Bus Topic的東西。

根據您的描述和代碼,您想要通過使用EventHubClient.send(EventData, PartitionKey)方法將事件數據發送到指定的分區。 但是,如您所見,第二個參數是PartitionKey ,而不是PartitionId 官方的API參考從此處如下所述,您的代碼按分區存儲數據是不正確的。

多個PartitionKey可以映射到一個分區。 EventHubs服務使用專有的哈希算法將PartitionKey映射到PartitionId。 使用這種類型的發送(使用特定的partitionKey發送)有時可能會導致分區分布不均。

請參考正式文檔, 其中,使用Java客戶端發布事件以用於Azure事件中心 ,使用消費事件使用Java客戶端來用於Azure事件中心,以創建PartitionSenderPartitionReceiver來向/從指定分區發送/接收事件數據,如下所示。

對於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM