Spring Cloud 之使用sts创建RabbitMQ入门案例

一、新建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]

即     http://localhost:15672/

2.选中标签【admin】--【users】,在用户列表点击需要授权的用户

点击【set permission】按钮

设置完成后,重试即可。

五:查看RabbitMQ后台管理平台

猜你喜欢

转载自blog.csdn.net/u014165193/article/details/84324831