All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.azure.messaging.eventhubs.models.EventHubConnectionStringProperties Maven / Gradle / Ivy

There is a newer version: 5.19.2
Show newest version
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.messaging.eventhubs.models;

import com.azure.core.amqp.implementation.ConnectionStringProperties;
import com.azure.core.credential.AzureNamedKeyCredential;
import com.azure.core.credential.AzureSasCredential;
import com.azure.core.credential.TokenCredential;
import com.azure.messaging.eventhubs.EventHubClientBuilder;

import java.net.URI;

/**
 * A utility class that parses a connection string into sections. An Event Hubs connection string is a set of key-value
 * pairs separated by semicolon. A typical example is
 * {@code "Endpoint=sb://foo.EventHub.windows.net/;SharedAccessKeyName=someKeyName;SharedAccessKey=someKeyValue"}.
 *
 * 

A connection may have the following sections: *

    *
  • Endpoint, which is mandatory. The fully qualifed namespace of the Event Hubs namespace. It will look similar * to "{your-namespace}.servicebus.windows.net"
  • * *
  • SharedAccessKeyName and SharedAccessKey, optional, used to authenticate the access to the Event Hubs * namespace or Event Hub instance.
  • *
  • EntityPath, optional, the name of the Event Hub instance.
  • *
  • SharedAccessSignature, optional, an alternative way to authenticate the access to an Event Hub instance.
  • *
* *

When you have an Event Hubs connection string, you can use {@link EventHubClientBuilder#connectionString(String)} * to build a client. If you'd like to use a {@link TokenCredential} to access an Event Hub, you can use this utility * class to get the fully qualified namespace and entity path from the connection string and then use * {@link EventHubClientBuilder#credential(String, String, TokenCredential)}.

* *

Sample: Construct a producer using Event Hub specific connection string

* *

The code snippet below shows how to create a sync producer using a connection string that is scoped to a specific * Event Hub. This can be found in the Azure Portal by navigating to the Event Hubs namespace, selecting an Event Hub, * then choosing "Shared access policies" in the "Settings" panel. The visual difference between an Event Hub specific * connection string and an Event Hubs namespace connection string is the "EntityPath" section. Additionally, this * type of connection string is scoped to that specific Event Hub instance.

* * *
 * String connectionString = "Endpoint=sb://demo-hub.servicebus.windows.net/;SharedAccessKeyName=TestAccessKey;"
 *     + "SharedAccessKey=TestAccessKeyValue;EntityPath=MyEventHub";
 *
 * EventHubConnectionStringProperties properties = EventHubConnectionStringProperties.parse(connectionString);
 * AzureNamedKeyCredential credential = new AzureNamedKeyCredential(properties.getSharedAccessKeyName(),
 *     properties.getSharedAccessKey());
 *
 * EventHubProducerClient producer = new EventHubClientBuilder()
 *     .credential(properties.getFullyQualifiedNamespace(), properties.getEntityPath(), credential)
 *     .buildProducerClient();
 * 
* * *

Sample: Construct a producer using Event Hubs namespace connection string

* *

The code snippet below shows how to create a sync producer using an Event Hubs namespace connection string. This * can be found in the Azure Portal by navigating to the Event Hubs namespace then choosing "Shared access policies" in * the "Settings" panel. The visual difference between an Event Hubs namespace connection string and an Event Hub * specific namespace connection string is the absence of the "EntityPath" section. Namespace connection strings have * access to all Event Hub instances in that namespace.

* * *
 * String connectionString = "Endpoint=sb://demo-hub.servicebus.windows.net/;"
 *     + "SharedAccessKeyName=NamespaceAccessKey;SharedAccessKey=NamespaceAccessKeyValue";
 *
 * String eventHubName = "my-event-hub";
 *
 * EventHubConnectionStringProperties properties = EventHubConnectionStringProperties.parse(connectionString);
 * AzureNamedKeyCredential credential = new AzureNamedKeyCredential(properties.getSharedAccessKeyName(),
 *     properties.getSharedAccessKey());
 *
 * EventHubProducerClient producer = new EventHubClientBuilder()
 *     .credential(properties.getFullyQualifiedNamespace(), eventHubName, credential)
 *     .buildProducerClient();
 * 
* * *

Sample: Construct a producer using a shared access signature (SAS)

* *

The code snippet below shows how to create a sync producer using a shared access signature (SAS). Shared access * signatures allow for granular control over access to an Event Hub. * Authenticate access * to Event Hubs resources using shared access signatures (SAS) contains information about how to configure and * generate signatures.

* * *
 * // "sr" is the URI of the resource being accessed.
 * // "se" is the expiration date of the signature.
 * // "skn" is name of the authorization policy used to create the SAS
 * String connectionString = "Endpoint={endpoint};EntityPath={entityPath};SharedAccessSignature="
 *     + "SharedAccessSignature sr={fullyQualifiedNamespace}&sig={signature}&se={expiry}&skn={policyName}";
 *
 * EventHubConnectionStringProperties properties = EventHubConnectionStringProperties.parse(connectionString);
 * AzureSasCredential credential = new AzureSasCredential(connectionString);
 *
 * EventHubConsumerClient consumer = new EventHubClientBuilder()
 *     .credential(properties.getFullyQualifiedNamespace(), properties.getEntityPath(), credential)
 *     .buildConsumerClient();
 * 
* * * @see EventHubClientBuilder#connectionString(String, String) * @see EventHubClientBuilder#credential(String, String, AzureNamedKeyCredential) * @see EventHubClientBuilder#credential(String, String, AzureSasCredential) */ public final class EventHubConnectionStringProperties { private final URI endpoint; private final String entityPath; private final String sharedAccessKeyName; private final String sharedAccessKey; private EventHubConnectionStringProperties(ConnectionStringProperties properties) { this.endpoint = properties.getEndpoint(); this.entityPath = properties.getEntityPath(); this.sharedAccessKeyName = properties.getSharedAccessKeyName(); this.sharedAccessKey = properties.getSharedAccessKey(); } /** * Parse a Event Hub connection string into an instance of this class. * * @param connectionString The connection string to be parsed. * * @return An instance of this class. * @throws NullPointerException if {@code connectionString} is null. * @throws IllegalArgumentException if the {@code connectionString} is empty or malformed. */ public static EventHubConnectionStringProperties parse(String connectionString) { return new EventHubConnectionStringProperties(new ConnectionStringProperties(connectionString)); } /** * Gets the "EntityPath" value of the connection string. * * @return The entity path, or {@code null} if the connection string doesn't have an "EntityPath". */ public String getEntityPath() { return entityPath; } /** * Gets the "Endpoint" value of the connection string. * * @return The endpoint. */ public String getEndpoint() { return String.format("%s://%s", endpoint.getScheme(), endpoint.getHost()); } /** * Gets the fully qualified namespace, or hostname, from the connection string "Endpoint" section. * * @return The fully qualified namespace. */ public String getFullyQualifiedNamespace() { return endpoint.getHost(); } /** * Gets the "SharedAccessKeyName" section of the connection string. * * @return The shared access key name, or {@code null} if the connection string doesn't have a * "SharedAccessKeyName". */ public String getSharedAccessKeyName() { return sharedAccessKeyName; } /** * Gets the "SharedAccessSignature" section of the connection string. * * @return The shared access key value, or {@code null} if the connection string doesn't have a * "SharedAccessSignature". */ public String getSharedAccessKey() { return sharedAccessKey; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy