消息队列,外文名Message Queue
,简称MQ
,是指在消息的传输中保存消息的容器或服务。
消息队列,是分布式系统实现高性能、高可用、可伸缩等高级特效的重要组件,适用多种场景,如:消息通讯、异步处理、应用解耦、流量削峰等等。
消息队列主要有两种模式:点对点(Point to Point)模式和发布-订阅(Publisher-Subscriber)模式。
安装:
安装 RabbitMQ 之前要安装 Erlang ,可以去Erlang官网下载。接着去RabbitMQ官网下载安装包,之后解压缩即可。
+ 1 安装otp_win64_20.2.exe
配置环境变量:
ERLANG_HOME=C:\Program Files\erl9.2
PATH环境变量中添加变量:
%ERLANG_HOME%\bin
+ 2 安装rabbitmq-server-3.7.4.exe
+ 3.启动插件界面
+ cd到启动sbin目录
cmd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.4\sbin
+ 执行命令
rabbitmq-plugins.bat enable rabbitmq_management
+ 执行命令(或者在服务中右击鼠标进行重启):
rabbitmqctl stop
rabbitmq-server restart
1.引入依赖:
<!--RabbitMQ依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.在yml配置文件里配置RabbitMQ的ip端口号名字密码等
spring
rabbitmq:
host: 192.168.1.201
port: 5672
virtual-host: /
username: guest
password: guest
# rabbitmq 的设置
mq:
test:
#交换机
exchange:
message: exchange.message
#队列
queue:
message: queue.message
#路由
routing:
key: queue.message
3.启动类中参加
//获取yml中的属性对应的值'
@Autowired
private Environment environment;
//创建队列
@Bean
public Queue queueOrder() {
return new Queue(environment.getProperty("mq.test.queue.message"));
}
//创建交互机 路由模式的交换机
@Bean
public DirectExchange createExchange() {
return new DirectExchange(environment.getProperty("mq.test.exchange.message"));
}
//创建绑定 指定routingkey
@Bean
public Binding createBinding() {
return BindingBuilder.bind(queueOrder()).to(createExchange()).with(environment.getProperty("mq.test.routing.key"));
}
4.发送消息
@RestController
@RequestMapping("/send")
public class Send {
@Autowired
private RabbitTemplate rabbitTemplate;
@Value("${mq.test.exchange.message}")
private String exchange;
@Value("${mq.test.routing.key}")
private String routing;
@RequestMapping(value = "/test")
public Result<?> test() {
String msg = "消息内容,完美接通!!";
//参数1 指定交换机的名称 exchange
//参数2 指定routingkey routing
//参数3 指定消息本身 msg
System.out.println("写进队列消息" + msg);
rabbitTemplate.convertAndSend(exchange, routing, msg);
return Result.OK("发送消息,测试成功", null);
}
}
5.接收消息,消息处理类,监听队列 (在接收方同样要导入mq的依赖和配置文件配置)
@RestController
@RabbitListener(queues = "queue.message")
public class Consumer {
@RabbitHandler //处理字符类型
public void handler(String msg) {
if (!StringUtils.isEmpty(msg)) {
System.out.println("打印:" + msg);
} else {
System.out.println("通信失败");
}
}
}