2017-02-20 1 views
0

Я создал центр событий на портале Azure с 2 разделами (0 и 1). Поскольку нет концепции тем в таких концентраторах событий, как Service Bus. Я пытаюсь хранить различные данные в разделе 0 и разделе 1, используяЕсть ли что-то похожее на темы Azure Service Bus в концентраторах Azure Event?

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.

Моя recieiver логики is:

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?

+0

Нет, см. Http://stackoverflow.com/questions/42255265/how-are-different-events-handled-in-azure-event-hubs –

ответ

0

Для вашего титульного вопроса, как сказал @PeterBons, нет ничего похожего на тему Azure Service Bus в EventHubs.

Согласно вашему описанию коды &, вы хотите отправить данные о событиях в указанный раздел, как хотите, используя метод EventHubClient.send(EventData, PartitionKey). Однако, как вы видите, вторым аргументом является PartitionKey, а не PartitionId. И официальная ссылка API, указанная ниже: here, неверно для вашего кода для хранения данных по разделам.

Несколько разделовKey могут быть сопоставлены с одним разделом. Служба EventHubs использует запатентованный алгоритм Hash для сопоставления PartitionKey с PartitionId. Использование этого типа отправки (Отправка с использованием определенного разделаKey) иногда может приводить к разделам, которые распределены неравномерно.

Пожалуйста, обратитесь к OFFICAL документов Publishing Events with the Java client for Azure Event Hubs & Consuming Events with the Java client for Azure Event Hubs создать 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 Service Bus Topic заключается в том, что добавьте свойство, подобное topic, в данные события с использованием формата JSON, а фильтр & отправит данные в пределах topic свойства при приеме.

Надеюсь, это поможет. Любое беспокойство, пожалуйста, не стесняйтесь, дайте мне знать.