JMS消息队列详解以及在SpringBoot中如何使用

一、什么是JMS消息队列?

       JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

二、ActiveMQ

       Apache ActiveMQApache软件基金会所研发的开放源代码消息中间件;由于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的哪些功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山川志~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值