This sample demonstrates consuming Eclipse Ditto events and messages with a Spring Boot app and Spring JMS integration based on Apache Qpid JMS is an AMQP 1.0 Java Message Service 2.0 client.
Note: we use Qpid JMS as of version 1.X the Microsoft Azure Service Bus Client for Java does not support reading text payload by AMQP value as sent by Ditto.
First create a Azure resource group if you have not done so yet.
export resourceGroupName=YOUR_RESOURCE_GROUP
az group create --name $resourceGroupName --location westeurope
Now create your Azure Service Bus namespace, topics and queues. The namespace needs to be globally unique as it is used as DNS name as well.
export topic=dittooutbound
export queue=dittoinbound
export responseQueue=dittoresponses
export subscription=fromditto
export namespace=YOUR_NAMESPACE
az servicebus namespace create --resource-group $resourceGroupName \
--name $namespace
az servicebus topic create --resource-group $resourceGroupName \
--namespace-name $namespace \
--name $topic
az servicebus queue create --resource-group $resourceGroupName \
--namespace-name $namespace \
--name $queue
az servicebus queue create --resource-group $resourceGroupName \
--namespace-name $namespace \
--name $responseQueue
az servicebus topic subscription create --resource-group $resourceGroupName \
--namespace-name ${namespace} --topic-name ${topic} \
--name ${subscription}
Now we can create users for Ditto and for the sample app to with Send
as well as Listen
permission.
export ditto_user_sas_key_name=dittouser
export sample_app_user_sas_key_name=sampleapp
az servicebus namespace authorization-rule create --resource-group $resourceGroupName \
--namespace-name $namespace --name $ditto_user_sas_key_name --rights {Send,Listen}
az servicebus namespace authorization-rule create --resource-group $resourceGroupName \
--namespace-name $namespace --name $sample_app_user_sas_key_name --rights {Send,Listen}
Now the CLI again to retrieve the key necessary in the REST call to Ditto below:
az servicebus namespace authorization-rule keys list --resource-group $resourceGroupName \
--namespace-name $namespace --name $ditto_user_sas_key_name --query primaryKey
To register the connection to the Service Bus in your Ditto instance. Follow Ditto’s Manage Connection documentation.
A payload could look like this:
{
"targetActorSelection": "/system/sharding/connection",
"headers": {},
"piggybackCommand": {
"type": "connectivity.commands:createConnection",
"connection": {
"id": "azure-servicebus-topic-connection",
"connectionType": "amqp-10",
"connectionStatus": "open",
"failoverEnabled": true,
"uri": "amqps://YOUR_SAS_KEY_NAME:YOUR_SAS_KEY@YOUR_NAMESPACE_NAME.servicebus.windows.net:5671",
"targets": [
{
"address": "topic://dittooutbound",
"topics": ["_/_/things/twin/events", "_/_/things/live/messages"],
"authorizationContext": ["ditto"]
}
],
"sources": [
{
"addresses": ["dittoinbound"],
"authorizationContext": ["ditto"]
}
],
"specificConfig": {
"amqp.idleTimeout": 120000
}
}
}
}
Now it is time to compile and run our sample:
mvn clean install
export sample_app_user_sas_key=`az servicebus namespace authorization-rule keys list --resource-group $resourceGroupName --namespace-name $namespace --name $sample_app_user_sas_key_name --query primaryKey --output tsv`
java -jar target/azure-servicebus-amqp10-0.0.1-SNAPSHOT.jar \
--amqphub.amqp10jms.remote-url=amqps://$namespace.servicebus.windows.net \
--amqphub.amqp10jms.username=$sample_app_user_sas_key_name \
--amqphub.amqp10jms.password=$sample_app_user_sas_key
Now you should see on the console events send to Ditto including the response. In addition similar to the Azure Event Hubs: Azure Event Hubs example events coming in as you change data in Ditto, e.g. as described in the Ditto hello world.