一、新建springboot项目,引入依赖Web、RabbitMQ
二、配置(去官网参考配置)
访问官网http://spring.io/,选中PROJECTS
选择sprinmgboot
选择Spring AMQP
参考官网示例:
首先修改配置文件application.properties,添加如下配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
三、编码
package com.jxy.rabbitmq;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 创建消息队列
* @author Administrator
*
*/
@Configuration
public class QueueConfig {
/**
* 创建队列
* @return
*/
@Bean
public Queue createQueue() {
return new Queue("first-queue");
}
}
package com.jxy.rabbitmq;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 消息发送者
* @author Administrator
*
*/
@Component
public class Sender {
@Autowired
private AmqpTemplate amqpTemplate;
public void send(String msg) {
amqpTemplate.convertAndSend("first-queue",msg);
}
}
package com.jxy.rabbitmq;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 消息接收者
* @author Administrator
*
*/
@Component
public class Receiver {
@RabbitListener(queues="first-queue")
public void process(String msg) {
System.out.println("接收消息:"+msg);
}
}
package com.jxy.rabbitmq;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes=DemoRabbitmqApplication.class)
public class QueueTest {
@Autowired
private Sender sender;
@Test
public void testSend() {
this.sender.send("hi rabbitMQ");
}
}
四、运行结果
运行后报错:
org.springframework.amqp.AmqpIOException: java.io.IOException
at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:71) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:504) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:628) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:240) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1816) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1790) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1771) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:345) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.redeclareElementsIfNecessary(AbstractMessageListenerContainer.java:1604) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:995) [spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
Caused by: java.io.IOException: null
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:126) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:122) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:144) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:401) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1104) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1054) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:994) ~[amqp-client-5.4.3.jar:5.4.3]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:457) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
... 9 common frames omitted
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: #method<connection.close>(reply-code=530, reply-text=NOT_ALLOWED - access to vhost '/' refused for user 'admin', class-id=10, method-id=40)
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:494) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:288) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:138) ~[amqp-client-5.4.3.jar:5.4.3]
... 14 common frames omitted
2018-11-21 17:17:44.408 ERROR 71700 --- [ 127.0.0.1:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured
java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_101]
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_101]
at java.net.SocketInputStream.read(SocketInputStream.java:170) ~[na:1.8.0_101]
at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_101]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_101]
at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_101]
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_101]
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:596) ~[amqp-client-5.4.3.jar:5.4.3]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
2018-11-21 17:17:44.413 INFO 71700 --- [cTaskExecutor-1] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [127.0.0.1:5672]
2018-11-21 17:17:44.444 ERROR 71700 --- [ 127.0.0.1:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured
java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_101]
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_101]
at java.net.SocketInputStream.read(SocketInputStream.java:170) ~[na:1.8.0_101]
at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_101]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_101]
at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_101]
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_101]
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:596) ~[amqp-client-5.4.3.jar:5.4.3]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
2018-11-21 17:17:44.455 INFO 71700 --- [ main] com.jxy.rabbitmq.QueueTest : Started QueueTest in 3.576 seconds (JVM running for 4.486)
2018-11-21 17:17:44.786 INFO 71700 --- [ main] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [127.0.0.1:5672]
2018-11-21 17:17:44.808 ERROR 71700 --- [ 127.0.0.1:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured
java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_101]
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_101]
at java.net.SocketInputStream.read(SocketInputStream.java:170) ~[na:1.8.0_101]
at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_101]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_101]
at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_101]
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_101]
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) ~[amqp-client-5.4.3.jar:5.4.3]
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:596) ~[amqp-client-5.4.3.jar:5.4.3]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
网上说是没有给新增用户授权,授权方法如下,参考https://blog.csdn.net/qq_22638399/article/details/81705606
解决方法如下:
1.登录监控平台
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
访问地址http://[spring.rabbitmq.host]:1[spring.rabbitmq.port]
2.选中标签【admin】--【users】,在用户列表点击需要授权的用户
点击【set permission】按钮
设置完成后,重试即可。