/**
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for
* license information.
*/
package com.microsoft.azure.management.servicebus.samples;
import com.microsoft.azure.PagedList;
import com.microsoft.azure.management.Azure;
import com.microsoft.azure.management.resources.fluentcore.arm.Region;
import com.microsoft.azure.management.resources.fluentcore.utils.SdkContext;
import com.microsoft.azure.management.samples.Utils;
import com.microsoft.azure.management.servicebus.AuthorizationKeys;
import com.microsoft.azure.management.servicebus.NamespaceAuthorizationRule;
import com.microsoft.azure.management.servicebus.NamespaceSku;
import com.microsoft.azure.management.servicebus.Policykey;
import com.microsoft.azure.management.servicebus.ServiceBusNamespace;
import com.microsoft.azure.management.servicebus.Subscription;
import com.microsoft.azure.management.servicebus.Topic;
import com.microsoft.rest.LogLevel;
import com.microsoft.windowsazure.Configuration;
import com.microsoft.windowsazure.services.servicebus.ServiceBusConfiguration;
import com.microsoft.windowsazure.services.servicebus.ServiceBusContract;
import com.microsoft.windowsazure.services.servicebus.ServiceBusService;
import com.microsoft.windowsazure.services.servicebus.models.BrokeredMessage;
import java.io.File;
/**
* Azure Service Bus basic scenario sample.
* - Create namespace.
* - Create a topic.
* - Update topic with new size and a new ServiceBus subscription.
* - Create another ServiceBus subscription in the topic.
* - List topic
* - List ServiceBus subscriptions
* - Get default authorization rule.
* - Regenerate the keys in the authorization rule.
* - Send a message to topic using Data plan sdk for Service Bus.
* - Delete one ServiceBus subscription as part of update of topic.
* - Delete another ServiceBus subscription.
* - Delete topic
* - Delete namespace
*/
public final class ServiceBusPublishSubscribeBasic {
/**
* Main function which runs the actual sample.
* @param azure instance of the azure client
* @return true if sample runs successfully
*/
public static boolean runSample(Azure azure) {
// New resources
final String rgName = SdkContext.randomResourceName("rgSB02_", 24);
final String namespaceName = SdkContext.randomResourceName("namespace", 20);
final String topicName = SdkContext.randomResourceName("topic_", 24);
final String subscription1Name = SdkContext.randomResourceName("sub1_", 24);
final String subscription2Name = SdkContext.randomResourceName("sub2_", 24);
try {
//============================================================
// Create a namespace.
System.out.println("Creating name space " + namespaceName + " in resource group " + rgName + "...");
ServiceBusNamespace serviceBusNamespace = azure.serviceBusNamespaces()
.define(namespaceName)
.withRegion(Region.US_WEST)
.withNewResourceGroup(rgName)
.withSku(NamespaceSku.PREMIUM_CAPACITY1)
.create();
System.out.println("Created service bus " + serviceBusNamespace.name());
Utils.print(serviceBusNamespace);
//============================================================
// Create a topic in namespace
System.out.println("Creating topic " + topicName + " in namespace " + namespaceName + "...");
Topic topic = serviceBusNamespace.topics().define(topicName)
.withSizeInMB(2048)
.create();
System.out.println("Created second queue in namespace");
Utils.print(topic);
//============================================================
// Get and update topic with new size and a subscription
System.out.println("Updating topic " + topicName + " with new size and a subscription...");
topic = serviceBusNamespace.topics().getByName(topicName);
topic = topic.update()
.withNewSubscription(subscription1Name)
.withSizeInMB(3072)
.apply();
System.out.println("Updated topic to change its size in MB along with a subscription");
Utils.print(topic);
Subscription firstSubscription = topic.subscriptions().getByName(subscription1Name);
Utils.print(firstSubscription);
//============================================================
// Create a subscription
System.out.println("Adding second subscription" + subscription2Name + " to topic " + topicName + "...");
Subscription secondSubscription = topic.subscriptions().define(subscription2Name).withDeleteOnIdleDurationInMinutes(10).create();
System.out.println("Added second subscription" + subscription2Name + " to topic " + topicName + "...");
Utils.print(secondSubscription);
//=============================================================
// List topics in namespaces
PagedList<Topic> topics = serviceBusNamespace.topics().list();
System.out.println("Number of topics in namespace :" + topics.size());
for (Topic topicInNamespace : topics) {
Utils.print(topicInNamespace);
}
//=============================================================
// List all subscriptions for topic in namespaces
PagedList<Subscription> subscriptions = topic.subscriptions().list();
System.out.println("Number of subscriptions to topic: " + subscriptions.size());
for (Subscription subscription : subscriptions) {
Utils.print(subscription);
}
//=============================================================
// Get connection string for default authorization rule of namespace
PagedList<NamespaceAuthorizationRule> namespaceAuthorizationRules = serviceBusNamespace.authorizationRules().list();
System.out.println("Number of authorization rule for namespace :" + namespaceAuthorizationRules.size());
for (NamespaceAuthorizationRule namespaceAuthorizationRule: namespaceAuthorizationRules) {
Utils.print(namespaceAuthorizationRule);
}
System.out.println("Getting keys for authorization rule ...");
AuthorizationKeys keys = namespaceAuthorizationRules.get(0).getKeys();
Utils.print(keys);
System.out.println("Regenerating secondary key for authorization rule ...");
keys = namespaceAuthorizationRules.get(0).regenerateKey(Policykey.SECONDARY_KEY);
Utils.print(keys);
//=============================================================
// Send a message to topic.
try {
Configuration config = Configuration.load();
config.setProperty(ServiceBusConfiguration.CONNECTION_STRING, keys.primaryConnectionString());
ServiceBusContract service = ServiceBusService.create(config);
service.sendTopicMessage(topicName, new BrokeredMessage("Hello World"));
}
catch (Exception ex) {
}
//=============================================================
// Delete a queue and namespace
System.out.println("Deleting subscription " + subscription1Name + " in topic " + topicName + " via update flow...");
topic = topic.update().withoutSubscription(subscription1Name).apply();
System.out.println("Deleted subscription " + subscription1Name + "...");
System.out.println("Number of subscriptions in the topic after deleting first subscription: " + topic.subscriptionCount());
System.out.println("Deleting namespace " + namespaceName + "...");
// This will delete the namespace and queue within it.
try {
azure.serviceBusNamespaces().deleteById(serviceBusNamespace.id());
}
catch (Exception ex) {
}
System.out.println("Deleted namespace " + namespaceName + "...");
return true;
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace();
} finally {
try {
System.out.println("Deleting Resource Group: " + rgName);
azure.resourceGroups().beginDeleteByName(rgName);
System.out.println("Deleted Resource Group: " + rgName);
} catch (NullPointerException npe) {
System.out.println("Did not create any resources in Azure. No clean up is necessary");
} catch (Exception g) {
g.printStackTrace();
}
}
return false;
}
/**
* Main entry point.
* @param args the parameters
*/
public static void main(String[] args) {
try {
//=============================================================
// Authenticate
final File credFile = new File(System.getenv("AZURE_AUTH_LOCATION"));
Azure azure = Azure
.configure()
.withLogLevel(LogLevel.BODY_AND_HEADERS)
.authenticate(credFile)
.withDefaultSubscription();
// Print selected subscription
System.out.println("Selected subscription: " + azure.subscriptionId());
runSample(azure);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}