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:
Thanks in advance for any suggestions and explanations.
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).