AMQP 1.0 and distributed transactions - amqp

Question 1
A topic that is bothering me for a long time. I'm working with (QPID) AMQP 1.0 and trying to enable distributed transactions. Did anyone managed to do so? 1.0 spec (http://docs.oasis-open.org/amqp/core/v1.0/os/) points out that amqp:distributed-transactions capability will be described in Part 6 however it is not written yet.
Has anyone successfully managed to use distributed transactions using AMQP 1.0?
Question 2
Does QPID AMQP 1.0 client support distributed transactions?
Question 3
Does Microsoft Azure Service Bus support distributed transactions?

Unfortunately you are correct in that the specification for AMQP 1.0 distributed transactions is not complete and consequently there is no support for distributed transactions over AMQP 1.0 in Apache Qpid or Azure Service Bus.
Regards,
Dave.
(Service Bus team)

Related

Interoperability between AMQP 1.0 and 0-* clients

I'm thinking about introducing QPid Broker-J as an AMQP broker in the architecture we're developing, for it's wide support of different versions of the AMQP protocol.
We would be only producers, while third-party software over which we wouldn't have much control would act as consumer(s).
Our producers would be written in C++, so the most sensible thing to do at first seemed to adopt Proton C++ as a client library, which uses the latest AMQP 1.0.
I then read that the 1.0 specification is a lot different from all previous ones and this raises a concern about the interoperability. In example, it doesn't say anything about exchanges.
So, my question is... can the two versions communicate? Do I still have access even from AMQP 1.0 clients to all the concepts I need like exchanges and queue management that are from AMQP 0-* clients?
Or should I rather drop the idea of using Proton C++ and adopt another client for an older version (0-9-1 seems like the most commonly supported). Which one, in this case?
I found this vaguely related question and some interoperability documentation about RabbitMQ Clients with QPid Broker-J, but neither of them unfortunately answers my question. Proton's documentation is not that good as well, and I couldn't find anything interesting there either.
Thanks in advance for your time.
In general Qpid Broker-J provides full interoperability between clients of the different AMQP versions as much as it is possible to do so.
In terms of concepts such as exchanges, as you observe, these are not defined in AMQP 1.0 itself, however Qpid Broker-J allows your AMQP 1.0 clients to send messages to exchanges (and also to "consume" directly from an exchange by - in the background - creating a temporary queue and binding it to the exchange).
In terms of queue/exchange management, 0-x clients can continue to use operations like queue.declare or exchange.declare. For AMQP 1.0 clients these commands are not available, however Qpid Broker-J does offer a couple of ways to manage queues for AMQP 1.0 clients. One option would be to use Qpid Broker-J's REST API to create/bind exchanges/queues etc. The other (undocumented) option is to use management messages to the special $management address. This is an implementation of the Draft OASIS AMQP Management specification (which is subject to change, hence it is not documented currently). You can find an example of its use in some of Qpid Broker-J's tests, e.g. org.apache.qpid.systests.jms_1_1.extensions.management.AmqpManagementTest with the test method testCreateQueueOnVirtualHostManagement() giving an example as to how to create a queue over AMQP management for example.
If you have any more questions on Qpid Broker-J I'd suggest mailing the users list for Qpid (users#qpid.apache.org) where the developers would be happy to answer any questions.

Websphere MQ integration with Spring-AMQP

We are planning to do a POC with Websphere MQ (8.0.0.5).
Can anyone give any pointers on how to achieve the Websphere MQ (8.0.0.5 - which supports AMQP) integration with Spring-AMQP framework.
As far as i know Spring-AMQP inherently supports RabbitMQ.
Please let me know how this can be extended to Websphere MQ.
Thanks.
Spring AMQP does not support AMQP 1.0 which (I believe) is what Websphere MQ supports.
1.0 is a very different protocol to that supported by RabbitMQ (0.9.1).
Spring currently does not have an abstraction over AMQP 1.0; there is an open JIRA issue but it currently is not on the road map.
Contributions are welcome.

JMS 2.0 support in Mule

I was trying out for the possibility to use JMS 2.0 in Mule. In my research I found that ActiveMQ supports JMS 2.0 with the combination of Spring 4.1.0.RELEASE here
Can any one suggest the ways to use JMS 2.0 in Mule ESB using above please.
Thanks .!!
Mule 4 JMS connector is fully complaint with JMS 2.0.
JMS connector is
Fully compliant with JMS 2.0, 1.1, and 1.0.2 specifications.
I'm afraid there is no JMS2.0 support in MuleESB at this very moment, just 1.0.2b and 1.1. It has been on the radar for a while but no plans to support it yet.
Which features of JMS2.0 do you need? If it's competing consumers on topics are supported with activemq and 1.1 with virtual topics, and there is also a more poweful scheduled send than what it is in 2.0.

Is SAP Pi messaging service JMS compliant?

I am trying to find out if the built-in SAP PI messaging service JMS compliant or not?
Could not find it in the public documentation.
PI JMS Adapter (Version 7.4 AEX) is compatible with JMS 1.02b and 1.1 http://help.sap.de/saphelp_nw74/helpdata/en/cd/d85a9d6fab7d4dbb7ae421f710626c/content.htm
Edit:
I figured, SAP did change it's help links again (happens about half a year sigh)
Here's the original link thanks to wayback machine and the excerpt:
Configuring the JMS Adapter
The JMS adapter (Java Message Service) enables you to connect messaging systems to the Integration Engine.
The adapter supports the JMS specifications 1.02b and 1.1.
Here's the current (as of May 2020) link
Configuring the JMS Adapter
Cheers
Jens

Is there a JMS API/Client that works with all AMQP brokers?

The JMS is the vendor neutral API to messaging in the Java space. AMQP's mission is "to become the standard protocol for interoperability between all messaging middleware". I'm looking for a JMS client implementation that is interoperable between AMQP vendors. Specifically, it would be nice if it could talk to either RabbitMQ or Qpid.
The Qpid JMS client (which is, for the avoidance of effort, the same code as the OpenAMQ JMS client) encodes JMS in AMQP 0-9-1. I cannot speak for the quality of the client, but that should work for both Qpid Java edition and RabbitMQ.
It won't be an entirely lossless encoding, however -- there are some bits of API in JMS that don't carry across to AMQP. Qpid may have shims in place for those; RabbitMQ, by and large, doesn't. I am thinking specifically of 'nolocal' and selectors. There are probably others.
(Actually it /kind of/ does selectors using AMQP header exchanges, but the results may not be what you expect from JMS)
There is an effort to create a JMS client that uses AMQP 1.0. But there are no Qpid nor RabbitMQ releases that support AMQP 1.0, which is after all really an entirely different protocol to 0-9-1 and other prior versions.
I have used Apache Qpid client library (qpid-client-0.32-bin.tar.gz) with RabbitMQ (AMQP 0-9-1) recently and It worked very well.
If you want to connect to AMQP 1.0 Broker you should use this Qpid lib (apache-qpid-jms-0.1.0-bin.tar.gz)
Both libs can be downloaded from here:
http://qpid.apache.org/download.html
Qpid itself has a JMS client. I've never used it, but it is listed here under AMQP Client APIs
http://qpid.apache.org/

Resources