前言
项目中需要使用RabbitMQ的,且需要大量测试,于是初学本机安装测试使用,简单记录,及很蠢的坑。参考了很多博客,侵删!
MAC OS上安装
可官网下载:http://www.rabbitmq.com/download.html
也可以在mac终端上使用brew安装:
brew update
brew install rabbitmq
安装完之后一般位置在:/usr/local/Cellar/rabbitmq/{version}/
cd到该目录,执行 sbin/rabbitmq-server启动
新版一般会自带启动部分的插件,如:
浏览器 http://localhos:15672/ 进行访问,初始登陆用户密码一般为来宾
也可自己添加用户,赋权限操作
添加用户:rabbitmqctl add_user用户名密码
设置权限:
rabbitmqctl set_permissions [-p vhostpath] username regexp regexp regexp
rabbitmqctl set_user_tags user_admin管理员
vhostpath设置为“/”
设置完之后,可登陆管理界面查看:
结合spring-boot使用
只需要行家添加依赖
<dependency>
<groupId> org.springframework.boot </ groupId>
<artifactId> spring-boot-starter-amqp </ artifactId>
</ dependency>
例如:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies>
由于是启动,可以在代码中设置RabbitMQ的配置,也可使用配置文件,开机启动程序引入配置文件,如:
@Resource
@ImportResource(locations = {"classpath:rabbitmq-application.xml"})
@RestController
public class ClientApplicationStart {
XML配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.7.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<!-- rabbit config -->
<rabbit:connection-factory id="connectionFactory" host="127.0.0.1" port="5672"
username="test" password="test" />
<rabbit:admin connection-factory="connectionFactory" />
<!-- rabbit provider -->
<bean id="messageConverter" class="org.springframework.amqp.support.converter.SimpleMessageConverter"/>
<rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" message-converter="messageConverter" />
<!-- <rabbit:fanout-exchange id="co.file.fileConverter" name="co.file.fileConverter" />-->
<rabbit:queue id="testQueue" name="testQueue" auto-delete="false"/>
<rabbit:fanout-exchange id="testExchange" name="testExchange" >
<rabbit:bindings>
<rabbit:binding queue="testQueue"/>
</rabbit:bindings>
</rabbit:fanout-exchange>
<bean id="testListener" class="com.test.listener.TestListener" />
<rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto" concurrency="1"
message-converter="messageConverter">
<rabbit:listener ref="testListener" queues="testQueue"/>
</rabbit:listener-container>
</beans>
本以为一切都ojbk,很简单,结果启动就一直报错
Failed to check/redeclare auto-delete queue(s).
org.springframework.amqp.AmqpIOException: java.io.IOException
at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:71) ~[spring-rabbit-1.7.6.RELEASE.jar:na]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:376) ~[spring-rabbit-1.7.6.RELEASE.jar:na]
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:573) ~[spring-rabbit-1.7.6.RELEASE.jar:na]
at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1436) ~[spring-rabbit-1.7.6.RELEASE.jar:na]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1417) ~[spring-rabbit-1.7.6.RELEASE.jar:na]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1393) ~[spring-rabbit-1.7.6.RELEASE.jar:na]
at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:336) ~[spring-rabbit-1.7.6.RELEASE.jar:na]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.redeclareElementsIfNecessary(SimpleMessageListenerContainer.java:1209) ~[spring-rabbit-1.7.6.RELEASE.jar:na]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1470) [spring-rabbit-1.7.6.RELEASE.jar:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_172]
Caused by: java.io.IOException: null
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:105) ~[amqp-client-4.0.3.jar:4.0.3]
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:101) ~[amqp-client-4.0.3.jar:4.0.3]
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:353) ~[amqp-client-4.0.3.jar:4.0.3]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:909) ~[amqp-client-4.0.3.jar:4.0.3]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:859) ~[amqp-client-4.0.3.jar:4.0.3]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1013) ~[amqp-client-4.0.3.jar:4.0.3]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:364) ~[spring-rabbit-1.7.6.RELEASE.jar:na]
... 8 common frames omitted
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-4.0.3.jar:4.0.3]
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) ~[amqp-client-4.0.3.jar:4.0.3]
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:372) ~[amqp-client-4.0.3.jar:4.0.3]
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:297) ~[amqp-client-4.0.3.jar:4.0.3]
... 12 common frames omitted
Caused by: java.io.EOFException: null
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:290) ~[na:1.8.0_172]
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-4.0.3.jar:4.0.3]
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) ~[amqp-client-4.0.3.jar:4.0.3]
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:571) ~[amqp-client-4.0.3.jar:4.0.3]
... 1 common frames omitted
无奈各种找原因,网上对这种报错很多说法,一般为
如图1所示,网络设置问题,集群等IP端口映射问题(本地测试,单机IP连接,可忽略)
2,同样也不是连接拒绝,且telnet查看IP,端口,没问题
3,还有用户权限不足,同样也是设置一遍权限,用客人连接也一样
4,TCP连接数过多,最终也没看懂那个帖子在讲啥ORZ,单机一个人用,一个连接,也可排除
netstat查看端口连接情况,也没啥问题,看报错又肯定是连接问题
没办法,对照主项目之前配置,查看官网,才发现,崩溃....
官网对RabbitMQ的的配置:
http://www.rabbitmq.com/configure.html
https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.conf.example
原来,菜鸟的debuff,一开始安装完之后,就提示使用15672端口登陆管理界面,所以理所当然的认为
<rabbit:connection-factory id="connectionFactory" host="127.0.0.1" port="15672"
username="username" password="password" />
此处应该配置为15672,后续都是用该端口查看连接,占用情况。
看了官网之后,才知道正确的默认端口为5672(也可修改),15672是管理界面连接所用。果然官网是真理。
改了之后,正常启动。查看管理也正常
最后
记录下坑,而且百度也没找到跟我一样犯蠢的,计算器也没有。多看官网,多看官网,多看官网。
参考:
比较详细:https://www.cnblogs.com/s648667069/p/6401463.html
https://blog.csdn.net/yiluoAK_47/article/details/79656105
等很多博客
如有侵权,立马删除
刚刚发现了一位老哥,也是同样的错:https://www.oschina.net/question/1762811_2199005