一、什么是JMS消息队列?
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
二、ActiveMQ
Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。
三、在SpringBoot中如何使用ActiveMQ?
1.ActiveMQ 在官网下载文件
2.找到文件中的apache-activemq-5.11.1\bin\win64\activemq.bat 双击运行
3.复制地址在页面中访问消息队列
4.在pom.xml中加入依赖
<!-- jms消息队列依赖 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-broker</artifactId> <version>5.14.5</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.14.5</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-spring</artifactId> <version>5.14.5</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>artemis-jms-client</artifactId> <version>2.3.0</version> </dependency>
5.创建一个ActiveMQ包编写连接方法
Activemq类如以下内容:
package com.newstart.mq; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class Activemq { private static final String USERNAME; private static final String PASSWORD; private static final String BROKERURL; static { USERNAME=ActiveMQConnectionFactory.DEFAULT_USER; PASSWORD=ActiveMQConnectionFactory.DEFAULT_PASSWORD; BROKERURL=ActiveMQConnectionFactory.DEFAULT_BROKER_URL; } //创建链接工厂对象 ConnectionFactory connectionFactory; //创建链接对象 Connection connection=null; //创建session绘画 Session session=null; //创建消息 的目的地对象 Destination destination; //创建消息生产者 MessageProducer messageProducer; //创建消息消费者 static MessageConsumer messageConsumer; public void link(){ try { ActiveMQConnectionFactory mq = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKERURL); Connection connection = mq.createConnection(); connection.start(); session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); } catch (JMSException e){ e.printStackTrace(); } } public void setproducer(String QueueName,String text){ this.link(); try { destination = session.createQueue(QueueName); messageProducer = session.createProducer(destination); messageProducer.send(session.createTextMessage(text)); session.commit(); }catch (JMSException e){ e.printStackTrace(); } } public void getconsumer(String QueueName) throws JMSException { this.link(); destination = session.createQueue(QueueName); messageConsumer=session.createConsumer(destination); messageConsumer.setMessageListener(new Textmessagerimpl()); } public static void main(String[] args) throws JMSException { Activemq activemq=new Activemq(); activemq.getconsumer("李彦霖"); } }
创建Textmessagerimpl (用于从消息队列得到信息)
package com.newstart.mq; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; public class Textmessagerimpl implements MessageListener { @Override public void onMessage(Message message) { try { String text= ((TextMessage)message).getText(); System.out.println(text); } catch (JMSException e) { throw new RuntimeException(e); } } }
6. 假设将登录信息上传到消息队列
三、消息队列的三大好处
1.异步
2.解耦
3.削锋
四、常用场景
订单抢购、活动公告、注册、登录、消息推送
五、面试官常问问题
1.你项目里哪里用到MQ
2.为什么要使用MQ
3.MQ的三大特性
4.谈谈你对MQ的理解
5.你的项目用到了MQ的哪些功能