1.安装rabbitmq
在windows系统上安装rabbitmq
参考博客:https://www.cnblogs.com/saryli/p/9729591.html
2. 创建项目
2.1 引入依赖
<!--支持rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.2 编写配置文件
spring:
application:
name: rabbit-demo
rabbitmq:
host: 127.0.0.1
port: 5672
username: springcloud
password: springcloud
server:
port: 8099
2.3 创建rabbitmq的配置类
该配置类中是创建队列和exchange的,如下代码,我创建了一个名为hello的队列
@Configuration
public class RabbitConfig {
@Bean
public Queue helloQueue() {
return new Queue("hello");
}
}
2.4 创建消息生产者
@Component
public class Sender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send () {
String context = "hello "+ new Date();
System.out.println("Sender:" + context);
// 向rabbitmq中间件发送消息
this.rabbitTemplate.convertAndSend("hello",context);
}
}
2.5 创建消息消费者
@Component
// 该注解实现对hello队列的监听
@RabbitListener(queues = "hello")
public class Receiver {
// 指定对消息的处理方法
@RabbitHandler
public void process(String hello ) {
System.out.println("Receive: "+hello);
}
}
2.6 创建controller
@RestController
public class Controller {
@Autowired
private Sender sender;
@GetMapping("hello")
public String hello () {
sender.send();
return "ok";
}
}
通过调用接口来发送消息到消息中间件
2.7 测试
访问接口,然后消息能够被正常消费则表示正确
3. 新建用户的bug
3.1 创建用户
我们可以在rabbitmq上创建用户来实现不同的权限
tags表示用户的角色,一共有
none、management、policymaker、monitoring、administrator
RabbitMQ各类角色描述:
none
不能访问 management plugin
management
用户可以通过AMQP做的任何事外加:
列出自己可以通过AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和关闭自己的channels 和 connections
查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。
policymaker
management可以做的任何事外加:
查看、创建和删除自己的virtual hosts所属的policies和parameters
monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他用户的connections和channels
查看节点级别的数据如clustering和memory使用情况
查看真正的关于所有virtual hosts的全局的统计信息
administrator
policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts
查看、创建和删除users
查看创建和删除permissions
关闭其他用户的connections
3.2 启动项目,请求接口发送消息报错
当我们在rabbitmq 的控制台上创建用户后,假设我们创建的用户是springcloud,启动项目,访问/hello 接口发送消息到消息中间件,会发现java控制台报错了:
2020-05-06 21:17:49.686 ERROR 14572 --- [ 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_211]
3.3 解决
我们进入rabbitmq控制台会发现:can access virtual hosts是No access状态,即不允许访问
此时,我们需要进入用户,点击set permission为用户设置访问权限