MAC OS 安装rabbitmq+spring boot使用及踩坑 AmqpIOException: java.io.IOException

3 篇文章 0 订阅

前言

项目中需要使用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

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值