1、什么是MQ(message queue),是一个队列,先进先出。
2、为什么要MQ?
- 流量消峰:
- 应用解藕
- 异步处理
3、启动
# 后台启动
rabbitmq-server -detached
接下来我们实现我们第一个Hello World
(1)导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
(2)配置文件
spring:
rabbitmq:
host: IP地址
username: guest
password: guest
port: 15672
(3)编写代码。“p”是生产者,“C”是消费者,中间是队列RabbitMQ作为消息缓冲区
生成者
public class Produce {
// 队列名称
public static final String QUEUE_NAME = "hello";
// 发消息
public static void main(String[] args) throws Exception {
// 创建一个连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 创建连接
Connection connection = factory.newConnection();
// 获取信道
Channel channel = connection.createChannel();
// 生成队列
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
// 发消息
String message = "hello world";
/**
* 信道发消息
* 1、发送到那个交换机
* 2、路由的key值是那个,以下是使用队列的名称
* 3、其他参数信息
* 4、发送消息的消息体
*/
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
System.out.println("消息已经发送。。。");
}
}
消费者
package com.example.rabbitmqone;
import com.rabbitmq.client.*;
public class Consumer {
public static final String QUEUE_NAME = "hello";
public static void main(String[] args) throws Exception {
// 创建一个连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 创建连接
Connection connection = factory.newConnection();
// 获取信道
Channel channel = connection.createChannel();
// 声明接收消息
DeliverCallback deliverCallback = (consumerTag,message) -> {
System.out.println(new String(message.getBody()));
};
// 取消消息时的回调
CancelCallback cancelCallback = consumerTag -> {
System.out.println("消息消费被中断");
};
/**
* 消费者消费信息
* 1、消费那个队列
* 2、消费成功之后是否需要自动答应徒惹代表自动,false表示手动
* 3、消费者未成功消费的回调
* 4、消费者录取消费的回调
*/
channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);
}
}