1.消息队列: --是一个中间插件,主要由消息的生产和消费组成,简单过程来讲,生产者将消息发送到
消费队列的服务器上,消费者从消息队列服务上获取消息。
使用场景:
1.流量削峰:在某个时间段,web服务会受到大量的请求(并发量高)我们可以通过消息队列来
将波峰变得平峰,减轻服务器的压力
2.异步处理:有些业务处理起来比较耗时,当我们将要处理的信息存储到消息队列之后,
可以立即给发送方回复,同时我们也在处理该业务,当业务处理完成之后,在回复最终结果。
提高响应效率
3.松耦合: 有些功能之间在业务上有依赖关系,由于耦合度过高,某个功能进行了更改,依赖
该功能的其他功能也需要进行相应的修改,这样会导致系统很难维护。一方将数据发送到
消息队列,需要使用该数据的功能从消息队列中获取数据,多个业务之间就不需要直接通讯
消息队列的模式
1.点对点模式:
多个消费者,当某条消息被消费者使用之后,其他消费者就不能在获取到该消息
2.发布/订阅模式(话题模式)
订阅了该话题的消费者,都能收到该条消息(一条消息可以被多个消费者使用)
订阅者不能接收到订阅之前的消息
消息队列生产者过程
1.创建连接工厂
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(“tcp://localhost:61616”);
2.获取连接对象
Connection connection = factory.createConnection();
3.打开连接
connection.start();
4.获取会话对象
Session session =
connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
5.创建队列(可以是点对点或者话题)
点对点模式
Queue queue= session.createQueue(“first”);
6.创建生产者
MessageProducer producer= session.createProducer(queue);
7.创建消费对象
TextMessage message = session.createTextMessage(“消息内容”);
8.发送消息
producer.send(message);
//关闭
producer.close();
session.close();
connection.close();
System.out.println(“消息发送完成”);
消息队列消费者过程
ActiveMQConnectionFactory factory =
new ActiveMQConnectionFactory(“tcp://localhost:61616”);
Connection connection = factory.createConnection();
connection.start();
Session session= connection.createSession();
Queue queue= session.createQueue(“first”);
创建消费者
MessageConsumer consumer= session.createConsumer(queue);
获取消息(阻塞式)
TextMessage msg = (TextMessage) consumer.receive();
System.out.println("msg = " + msg.getText());
//阻塞线程
System.in.read();
//关闭
consumer.close();
session.close();
connection.close();
常用的消息队列的实现
1.activeMQ
2.kafka
3.RabbitMQ
4.RocketMQ