SpringBoot停止启动时测试检查rabbitmq操作

 更新时间:2021年09月10日 15:06:21   作者:GIS开发者  
这篇文章主要介绍了SpringBoot停止启动时测试检查rabbitmq操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

SpringBoot停止启动时测试检查rabbitmq

问题

在Springboot项目中配置rabbitmq后,总是在每次启动时自动测试MQ的连接,如果测试不通过,就一直重连,导致项目无法正常启动。自己在开发与MQ无关的功能时,无法正常进行,十分耽误时间。如下所示:

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.6.RELEASE.jar:2.0.6.RELEASE]
 at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:484) ~[spring-rabbit-2.0.6.RELEASE.jar:2.0.6.RELEASE]
 at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:628) ~[spring-rabbit-2.0.6.RELEASE.jar:2.0.6.RELEASE]
 at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:240) ~[spring-rabbit-2.0.6.RELEASE.jar:2.0.6.RELEASE]
 at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1816) ~[spring-rabbit-2.0.6.RELEASE.jar:2.0.6.RELEASE]
 at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1790) ~[spring-rabbit-2.0.6.RELEASE.jar:2.0.6.RELEASE]
 at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1771) ~[spring-rabbit-2.0.6.RELEASE.jar:2.0.6.RELEASE]
 at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:345) ~[spring-rabbit-2.0.6.RELEASE.jar:2.0.6.RELEASE]
 at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.redeclareElementsIfNecessary(AbstractMessageListenerContainer.java:1604) ~[spring-rabbit-2.0.6.RELEASE.jar:2.0.6.RELEASE]
 at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:995) [spring-rabbit-2.0.6.RELEASE.jar:2.0.6.RELEASE]
 at java.lang.Thread.run(Thread.java:748) [na:1.8.0_231]
Caused by: java.net.ConnectException: Connection timed out: connect
 at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_231]
 at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_231]
 at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_231]
 at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_231]
 at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_231]
 at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_231]
 at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_231]
 at java.net.Socket.connect(Socket.java:606) ~[na:1.8.0_231]
 at com.rabbitmq.client.impl.SocketFrameHandlerFactory.create(SocketFrameHandlerFactory.java:60) ~[amqp-client-5.4.1.jar:5.4.1]
 at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1102) ~[amqp-client-5.4.1.jar:5.4.1]
 at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1054) ~[amqp-client-5.4.1.jar:5.4.1]
 at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:994) ~[amqp-client-5.4.1.jar:5.4.1]
 at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:457) ~[spring-rabbit-2.0.6.RELEASE.jar:2.0.6.RELEASE]
 ... 9 common frames omitted

查找了很多地方,这里记录一下,如何在Springboot启动项目时,如何关闭RabbitMq的连接测试。

解决

在配置文件里增加

spring.rabbitmq.listener.direct.auto-startup= false
spring.rabbitmq.listener.simple.auto-startup= false

这样启动时就不会每次都检查RabbitMq是否可以连接了

RabbitMQ的简单使用的Demo

当前使用的版本:rabbitmq-server-windows-3.8.3

1.声明

当前内容用于本人学习和使用RabbitMQ这个消息队列,当前内容为SpringBoot操作RabbitMQ的基本操作

本人使用windows10方式使用RabbitMQ

2.创建一个测试账户

在这里插入图片描述

注意这里的Can access virtual hosts必须修改为/,否则可能出现连接失败,这里使用账户为root

3.pom依赖

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
		<relativePath />
	</parent>
	<groupId>SpringBoot-RabbitMQ</groupId>
	<artifactId>SpringBoot-RabbitMQ</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>SpringBoot-RabbitMQ</name>
	<url>http://maven.apache.org</url>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version><!-- 更新SpringCloud的版本 -->
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

4.配置文件application.properties

spring.application.name=rabbitmq-hello
server.port=8080
spring.rabbitmq.host
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=root
spring.rabbitmq.password=root

5.创建入口类

@RestController
@SpringBootApplication
public class RabbitMQApplication {
	@Autowired
	AmqpTemplate amqpTemplate;
	@RequestMapping("/send")
	public String send(String msg) {
		amqpTemplate.convertAndSend("test", msg);
		return "发送消息成功:===>" + msg;
	}
	public static void main(String[] args) {
		SpringApplication.run(RabbitMQApplication.class, args);
	}
	@Bean
	Queue queue() {
		return new Queue("test");
	}
	@Component
	@RabbitListener(queues = "test")
	class MsgCustomer {
		@RabbitHandler
		public void handlerMsg(String msg) {
			System.out.println("消息消费者消费===>" + msg);
		}
	}
}

6.测试

在这里插入图片描述

7.总结

1.通过使用SpringBoot操作RabbitMQ的时候非常简单,直接使用AmqpTemplate即可

2.通过@RabbitListener指定需要监听的队列,通过@RabbitHandler方式处理监听后的数据

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Springboot MultipartFile文件上传与下载的实现示例

    Springboot MultipartFile文件上传与下载的实现示例

    在Spring Boot项目中,可以使用MultipartFile类来处理文件上传和下载操作,本文就详细介绍了如何使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据

    SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据

    在处理大量数据时,为了提高效率和性能,通常需要采用批量插入的方式,本文主要介绍了SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 详解Http协议以及post与get区别

    详解Http协议以及post与get区别

    这篇文章主要介绍了详解Http协议以及post与get区别,通过分别说明Http协议以及get与post各自的概念,再到两者作比较有着详细的说明,希望对你有所帮助
    2021-06-06
  • Java应用开源框架实现简易web搜索引擎

    Java应用开源框架实现简易web搜索引擎

    本篇文章主要介绍了Java应用开源框架实现简易web搜索引擎,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java Spring处理循环依赖详解

    Java Spring处理循环依赖详解

    这篇文章主要介绍了Java中的Spring如何处理循环依赖,依赖指的是Bean与Bean之间的依赖关系,关于更多Spring 处理循环依赖的详情,需要的朋友可以参考下面文章具体内容
    2023-04-04
  • Maven中resources标签的用法详解

    Maven中resources标签的用法详解

    本文主要介绍了Maven中resources标签的用法详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java并发编程之阻塞队列(BlockingQueue)详解

    Java并发编程之阻塞队列(BlockingQueue)详解

    这篇文章主要介绍了详解Java阻塞队列(BlockingQueue)的实现原理,阻塞队列是Java util.concurrent包下重要的数据结构,有兴趣的可以了解一下
    2021-09-09
  • springboot各种格式转pdf的实例代码

    springboot各种格式转pdf的实例代码

    这篇文章主要介绍了springboot各种格式转pdf的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • swing jtextArea滚动条和文字缩放效果

    swing jtextArea滚动条和文字缩放效果

    这篇文章主要为大家详细介绍了swing jtextArea滚动条和文字缩放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Java中Object toString方法简介_动力节点Java学院整理

    Java中Object toString方法简介_动力节点Java学院整理

    Object类在Java里面是一个比较特殊的类,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object。接下来通过本文给大家介绍Object toString方法,需要的的朋友参考下吧
    2017-05-05

最新评论