2017-02-20 6 views
0

2つのパーティション(0と1)を持つAzureポータルでイベントハブを作成しました。サービスバスのようなイベントハブにトピックの概念がないため。私はパーティション1AzureイベントハブにAzure Service Busトピックがありますか?

マイrecieiverロジックに保存されたばかりのパーティション、それはデフォルトで0にデータを格納しようとしていたとしても

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のバストピックと同等のパーティションを使用できますか?

+0

いいえ、http://stackoverflow.com/questions/42255265/how-are-different-events-handled-in-azure-event-hubsを参照してください。 –

答えて

0

@PeterBonsのように、あなたのタイトルの質問には、EventHubsのAzure Service Bus Topicに類似したものはありません。

&コードに従うと、EventHubClient.send(EventData, PartitionKey)という方法を使用して、指定したパーティションにイベントデータを送信したいとします。しかし、あなたが見るように、第二引数はPartitionKeyであり、PartitionIdではありません。また、APIリファレンスではhereから次のようになりました。コードでパーティションごとにデータを保存するのは間違いです。

複数のPartitionKeyを1つのパーティションにマッピングできます。 EventHubsサービスは、独自のハッシュアルゴリズムを使用してPartitionKeyをPartitionIdにマッピングします。このタイプの送信(特定のpartitionKeyを使用して送信)を使用すると、均等に分散されないパーティションが生じることがあります。

以下のように、指定されたパーティションへ/から/受信イベントデータを送信するためにPartitionSender & PartitionReceiverを作成するために、公式文書Publishing Events with the Java client for Azure Event Hubs & Consuming Events with the Java client for Azure Event Hubsを参照してください。 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のサービスバストピックと同等にパーティションを使用したい理由を私は知りません。私の経験によれば、Azure Service Bus Topicの動作をシミュレートする回避策は、JSON形式を使用してtopicというイベントデータにプロパティを追加することです。

希望します。どんな心配も、私に知らせてください。

関連する問題