fmtn / a

ActiveMQ CLI testing and message management
Apache License 2.0
174 stars 51 forks source link

Azure support question #52

Closed erwindon closed 1 year ago

erwindon commented 3 years ago

In the usage description it says:

Set to disable transactions if not supported by platform. I.e. Azure Service Bus. When set to false, the Move option is NOT atomic.

To be more precise, the "Azure ServiceBus Basic" does not support transactions. "Azure ServiceBus Standard" does support transactions (and topics). I did not use "Azure ServiceBus Premium" yet, but that should at least be the same as "Standard".


In the read-me file, Azure ServiceBus is mentioned with:

A word of warning! There are some features not working with AMQP 1.0 in Service Bus. Some of which are mandatory to support the JMS API fully. This means some of the features of A will not work - or behave strangely.

Do you have more details on what "some features" includes?

northlander commented 3 years ago

Thanks for your question @erwindon. I did a quick test with Azure Service Bus and A many years ago and I had to add the "-T" option to disable transactional sessions. That is, the move and dump command can't roll back if somethings blows up during the operation. However, I have not had the chance to revisit Azure Service Bus since and things have probably evolved as you say. The documentation is very likely outdated.

If you do any further work with Azure Service Bus and A, please share your findings what works and what does not and we can add it to the readme. :-)

erwindon commented 3 years ago

I've investigated ASB about 2 years ago, but at that time only noticed the difference in support for queues vs queues+topics between "basic" and "standard". I'm investigating ASB again now and also for me it seems there were a few changes. I have some problems with the transactions (different problems between Basic and Standard). I'll update this issue in the next few weeks with my findings. Can you assign it to me?

erwindon commented 3 years ago

FYI: Azure supports 3 pricing tiers for the Azure ServiceBus. The Basic tier does not support transactions, therefore the option --no-transaction-support must be used. The Basic Tier also does not support topics. The Standard Tier and Premium Tier do support transactions and topics.

To get useable libraries for communication with Azure ServiceBus, download the apache-qpid-jms-0.56.0-bin.tar.gz from https://qpid.apache.org/download.html. After unpacking the tar.gz file, add lib/qpid-jms-client-0.56.0.jar and lib/proton-j-0.33.8.jar to the class-path of A. Fill a file details.properties (which must also be reachable from the class-path) with:

java.naming.factory.initial: org.apache.qpid.jms.jndi.JmsInitialContextFactory
connectionfactory.SBCF: amqps://<<name>>.servicebus.windows.net?amqp.idleTimeout=120000&amqp.traceFrames=true&jms.username=RootManageSharedAccessKey&jms.password=<<key>>
queue.<<jndiname>>: <<queuename>>

where <<name>> is the name of the servicebus, and <<key>> is the value from "Primary Key" or "Secondary Key" on the "Shared Access Policies" details page for that Azure ServiceBus. Use option --jndi "details.properties" to use the properties file. Use option --jndi-cf-name "SBCF" to reference the connection factory. Options --broker and --amqp are not needed. The <<jndiname>> can be any name as long as it is unique.

When using a topic, replace the queue reference with a topic reference:

topic.<<jndiname>>: <<topicname>>