1.什么是MQ
1.1MQ全称为Message Queue,即消息队列. 它也是一个队列,遵循FIFO原则 。RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue Protocol高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开 发中应用非常广泛。官方地址:http://www.rabbitmq.com/
2.MQ的使用场景
2.1 解耦 消除峰值 服务调用异步
3.MQ的组成
Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue。
Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。
Producer:消息生产者,即生产方客户端,生产方客户端将消息发送到MQ。
Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
4.在java中使用如何去使用MQ
4.1 首先我们导入MQ在java中的原生依赖
com.rabbitmq
amqp-client
5.4.1
导入成功之后我们先去创建一个生产者(Producer)和消费者(Consumer),
4.2 生产者的类我们有了,接下来就是去类中准备MQ所需要的东西了
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @author sj 生产者
* @data 2022/1/26 15:27
*/
public class Producer {
/**
* 对列名
*/
public static final String QUEUE = "OrderOfColumn";
public static void main(String[] args) throws IOException, TimeoutException {
// 创建工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// // 连接服务地址
// connectionFactory.setHost("127.0.0.1");
// connectionFactory.setPort(5672);
// 获取连接
Connection connection = connectionFactory.newConnection();
// 创建和交换机的通道
Channel channel = connection.createChannel();
/**
* 声明队列,如果Rabbit中没有此队列将自动创建
* param1:队列名称
* param2:是否持久化
* param3:队列是否独占此连接
* param4:队列不再使用时是否自动删除此队列
* param5:队列参数
*/
channel.queueDeclare(QUEUE,true,false,false,null);
/**
* * @param exchange用来发布消息的exchange
* * @param routingKey路由键
* * @param支持消息路由头等其他属性
* @param body消息正文
* * @当遇到错误时抛出java.io.IOException
*/
channel.basicPublish("",QUEUE,null,"我是你爸爸".getBytes());
System.out.println("消息发送完成");
channel.close();
connection.close();
}
}
其中我们创建完工厂以后,是可以指定ip,以及端口的,小哥在这里就选择了默认的,有兴趣的朋友可以点进工厂看一下,下图就是工厂的原生代码
生成者我们准备好了过后,我们就可以去发送消息了,发了消息过后我们可以去访问localhost:15672这个地址
由上图我们可以看到我们发送消息已经成功了,当然我们还可以看我们消息发送的内容,
当然小编这里只是给大家演示,并没有指定交换机等等,消息我们已经发送成功了,下面我们去写消费者
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @author sj 消费者
* @data 2022/1/26 15:27
*/
public class Consumer {
public static void main(String[] args) throws IOException, TimeoutException {
// 创建工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 获取连接
Connection connection = connectionFactory.newConnection();
// 创建和交换机的通道
Channel channel = connection.createChannel();
// 消费消息
DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("X消费者已经收到消息拉");
}
};
// 监听对列
channel.basicConsume(Producer.QUEUE,defaultConsumer);
}
}
消费者写好过后,我们就可以去消费消息了,
此时我们的消息就已经本消费了哦,下一章将讲解MQ的几种常用模型,以及消息丢失问题
4.小结
4.1消息发布接收流程:
1.发送消息
2.接收消息