Issue
I am trying to connect my Spring-Boot application to RabbitMQ which is hosted as a AWS service.I am getting the following exception when starting the application.
I am including the java exception, configurations of my spring boot and AWS as well
2021-05-15 09:31:50.651[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.j.e.a.AnnotationMBeanExporter [0;39m [2m:[0;39m Bean with name 'rabbitConnectionFactory' has been autodetected for JMX exposure
[2m2021-05-15 09:31:50.655[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.j.e.a.AnnotationMBeanExporter [0;39m [2m:[0;39m Located managed bean 'rabbitConnectionFactory': registering with JMX server as MBean [org.springframework.amqp.rabbit.connection:name=rabbitConnectionFactory,type=CachingConnectionFactory]
[2m2021-05-15 09:31:50.678[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.c.support.DefaultLifecycleProcessor [0;39m [2m:[0;39m Starting beans in phase 0
[2m2021-05-15 09:31:50.678[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m [36mo.s.c.support.DefaultLifecycleProcessor [0;39m [2m:[0;39m Starting beans in phase 2147483647
[2m2021-05-15 09:31:50.680[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m [36md.s.w.p.DocumentationPluginsBootstrapper[0;39m [2m:[0;39m Context refreshed
[2m2021-05-15 09:31:50.715[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m [36md.s.w.p.DocumentationPluginsBootstrapper[0;39m [2m:[0;39m Found 1 custom documentation plugin(s)
[2m2021-05-15 09:31:50.794[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[ main][0;39m [36ms.d.s.w.s.ApiListingReferenceScanner [0;39m [2m:[0;39m Scanning for api listing references
[2m2021-05-15 09:31:51.241[0;39m [32m INFO[0;39m [35m12988[0;39m [2m---[0;39m [2m[cTaskExecutor-1][0;39m [36mo.s.a.r.c.CachingConnectionFactory [0;39m [2m:[0;39m Attempting to connect to: [b-********-9c**-4b44-97c4-a3526fa7d4ee.mq.**-****east-1.amazonaws.com:5672]
[2m2021-05-15 09:32:12.283[0;39m [31mERROR[0;39m [35m12988[0;39m [2m---[0;39m [2m[cTaskExecutor-1][0;39m [36mo.s.a.r.l.SimpleMessageListenerContainer[0;39m [2m:[0;39m Failed to check/redeclare auto-delete queue(s).
org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection timed out: connect
at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:62) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:476) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:614) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:240) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1797) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1771) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1752) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:338) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.redeclareElementsIfNecessary(AbstractMessageListenerContainer.java:1604) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:963) [spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_261]
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_261]
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:81) ~[na:1.8.0_261]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476) ~[na:1.8.0_261]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218) ~[na:1.8.0_261]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200) ~[na:1.8.0_261]
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:162) ~[na:1.8.0_261]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394) ~[na:1.8.0_261]
at java.net.Socket.connect(Socket.java:606) ~[na:1.8.0_261]
at com.rabbitmq.client.impl.SocketFrameHandlerFactory.create(SocketFrameHandlerFactory.java:60) ~[amqp-client-5.1.2.jar:5.1.2]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:955) ~[amqp-client-5.1.2.jar:5.1.2]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:907) ~[amqp-client-5.1.2.jar:5.1.2]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:847) ~[amqp-client-5.1.2.jar:5.1.2]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:449) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
... 9 common frames omitted
below mentioned is configuration of the application.yml and pom.xml file
# RabbitMQ configuration
spring.rabbitmq.host=https://b-********-9c**-4b44-97c4-a3526fa7d4ee.mq.**-****east-1.amazonaws.com
#spring.rabbitmq.host=amqps://b-********-9c**-4b44-97c4-a3526fa7d4ee.mq.**-****east-1.amazonaws.com
#spring.rabbitmq.host=b-********-9c**-4b44-97c4-a3526fa7d4ee.mq.**-****east-1.amazonaws.com
spring.rabbitmq.port=5672
spring.rabbitmq.username=<username>
spring.rabbitmq.password=<password>
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.4.2</version>
</dependency>
aws inbound VPC configuration
Any Help is Appreciated, Thanks
Solution
#spring.rabbitmq.host=amqps://b--9c-4b44-97c4-a3526fa7d4ee.mq.-east-1.amazonaws.com
Taking hint from the above commented host property, it seems you have SSL enabled.
You can explicitly tell Spring to use SSL with spring.rabbitmq.ssl.enabled
property. This is how the entire set of properties would look like
spring.rabbitmq.ssl.enabled=true
spring.rabbitmq.host=b-XXXX-27f68f8379d3.mq.aws-region.amazonaws.com
spring.rabbitmq.port=5671
spring.rabbitmq.username=<YourUserName>
spring.rabbitmq.password=<YourPassword>
Or you can provide the addresses
along with the username
and password
and Spring Boot would figure out that it needs to use amqps
and port
5671
spring.rabbitmq.addresses=amqps://b-XXXX-27f68f8379d3.mq.aws-region.amazonaws.com:5671
spring.rabbitmq.username=<YourUserName>
spring.rabbitmq.password=<YourPassword>
Answered By - GSSwain
Answer Checked By - Candace Johnson (JavaFixing Volunteer)