Search code examples
spring-bootjmsactivemq-classicmessagingamqp

ActiveMQ Transport Protocol: amqps vs ampq+ssl


I try to consume messages from an ActiveMQ server via amqp protocol. Since there is a lot going on with ActiveMQ and the switch from javax.jms to jakarta.jms and the detach from the Spring-Boot v3 version I came up with the following setup:

//plugin
id 'org.springframework.boot' version '3.0.6'

//dependencies
implementation group: 'org.springframework', name: 'spring-jms', version: '6.0.8'
implementation group: 'org.apache.activemq', name: 'activemq-client-jakarta', version: '5.18.1'

I create a ActiveMQConnectionFactory bean for the required jakarta.jms.ConnectionFactory which seems to work fine.

With this said, my acutal problem is, that I run into a transport protocol issue. I figured out that when I import

implementation group: 'org.apache.activemq', name: 'activemq-amqp', version: '5.18.1'

I can consume messages with amqp protocol. But what I still am missing is a transport protocol for amqps, because the actual url I want to consume provides access with amqps. So I actually have two questions:

  1. What is the difference from amqps and amqp+ssl (which is provided by the lib)
  2. Where can I find the amqps transport protocol

Thanks in advance for any suggestions and explanations.


Solution

  • Neither org.apache.activemq:activemq-client-jakarta nor org.apache.activemq:activemq-amqp provide a client implementation for AMQP. The org.apache.activemq:activemq-client-jakarta dependency provides a Jakarta Messaging client implementation which uses the OpenWire protocol. The org.apache.activemq:activemq-amqp dependency provides a server-side implementation of AMQP used by ActiveMQ "Classic" (i.e. the broker). You'd configure amqp+ssl for the transportConnector in activemq.xml if you wanted the broker to support AMQP connections over SSL.

    If you want to use AMQP via Jakarta Messaging from Spring I recommend using Qpid JMS. There's a handy "starter" for Spring Boot as well.

    You can find the AMQP specification here. amqps is nothing more than normal AMQP over SSL so there is no specification specifically for it.

    Keep in mind that ActiveMQ "Classic" doesn't implement all of the functionality from JMS 2 & Jakarta Messaging 3. If you need a full implementation at this point you should use ActiveMQ Artemis (which is directly supported in Spring Boot 3).