文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

干货|SpringBoot JMS(ActiveMQ)API实践应用详解

2024-12-03 17:26

关注

 前言

Active是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。AC-tiveMQ使用Apache提供的授权,任何人都可以对其实现代码进行修改。

ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。ActiveMQ实现了JMS标准并提供了很多附加的特性。本文将带大家详细介绍ActiveMQ的API的使用。

1. JMS的概念?

「什么是JMS呢:」

「JMS能干什么呢:」

2、两种通信模型

「队列的通信概念:」

「主题的通信模型:」

3. MQ的实现产品

「实现产品:」

4、JMS中常见的名词

「常见的名词:」

5、什么是消息队列

「消息队列简单的说就是用来存放临时数据的地方:」

「消息队列类似于快递公司:」

6. ActiveMQ是什么

「含义:」

7、ActiveMQ能干什么

「主要作用:」

8、ActiveMQ的安装

「ActiveMQ的安装和配置:」

  1.  1、官网下载Linux版的ActiveMQ(最新版本为5.13.4) 
  2.        https://activemq.apache.org/download.html 
  3.  
  4.        2、解压安装 
  5.       tar -zxvf apache-activemq-5.13.4-bin.tar.gz 
  6.  
  7.        3、配置(这里采用默认配置,无需修改) 
  8.       vim /usr/lical/activemq-1/conf/activemq.xml 
  9.  
  10.        4、启动 
  11.       cd /usr/local/activemq-1/bin 
  12. ./activemq start 
  13.  
  14.       5、打开管理界面(管理界面可以查看并管理所有队列及消息) 
  15.          http://192.168.1.100:8161 
  16.  
  17.        启动成功后,可以浏览 http://localhost:8161/admin/ 
  18.        默认用户名、密码:admin/admin 
  19.        管理界面是用jetty做容器的,如果想修改管理界面的端口,可以编辑../conf/jetty.xml,找到下面这一段: 
  20.       "jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start"
  21.     -- the default port       number for the web console --> 
  22.     name="host" value="0.0.0.0"/> 
  23.     name="port" value="8161"/> 
  24.       
  25.        用户名/密码是在 ../conf/jetty-realm.properties 里,比如要增加一个管理员jimmy/123456,可参考下面修改: 
  26.        1 
  27. 3admin: admin, admin 
  28. jimmy: 123456, admin 
  29. useruseruser 
  30.        注:管理界面有一个小坑,ActiveMQ 5.13.2与jdk1.8兼容性有点问题,如果使用jdk1.8,管理界面进入Queues标签页时,偶尔会报错,但是并不影响消息正常收发,只是无法从界面上查看队列情况,如果出现该问题,可将jdk版本降至1.7,同时最好清空data目录下的所有数据,再重启activemq即可。 

9. ActiveMQ的API的使用

「AcatveMQ的API使用:」

 

  1. package com.qy.mq.queue; 
  2.  
  3. import org.apache.activemq.ActiveMQConnectionFactory; 
  4. import org.apache.activemq.Message; 
  5.  
  6. import javax.jms.*; 
  7.  
  8.  
  9. public class Producer { 
  10.  
  11.     //准备发布的这个地址 
  12.     private  static final String PATH="tcp://10.7.182.87:61616"
  13.     //ActiveMQ下的用户名 
  14.     private static final String userName="admin"
  15.     //ActiveMQ下的密码 
  16.     private static final String password="admin"
  17.  
  18.     public static void main(String[] args) throws JMSException { 
  19.         //第一步:创建连接的工厂 
  20.         ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(userName, password, PATH); 
  21.         //通过这个工厂获取连接 
  22.         Connection connection = activeMQConnectionFactory.createConnection(); 
  23.         //第三步:打开这个连接 
  24.         connection.start(); 
  25.         //第四步:创建操作MQ的这个会话 
  26.          
  27.         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
  28.         //需要发送消息的目的地(queue操作的是队列) 
  29.         Destination destination=session.createQueue("wqqq"); 
  30.         //生产者来生产这个消息 
  31.         //要有生产者 
  32.         MessageProducer messageProducer = session.createProducer(destination); 
  33.  
  34.         //发送很多的消息到消息队列中去 
  35. //        for (int i=0;i<100;i++){ 
  36.             //需要准备发送的消息 
  37. //            TextMessage textMessage = session.createTextMessage("我是浅羽:"+i); 
  38.             //研究消息的类型 
  39.  
  40.            
  41.  
  42.         //创建map类型的message 
  43.          
  44.  
  45.         ObjectMessage objectMessage = session.createObjectMessage(new User(1, "qianyu""123")); 
  46.         messageProducer.send(objectMessage); 
  47.  
  48. //        } 
  49.     } 
  50.  
  1. package com.qy.mq.queue; 
  2.  
  3. import org.apache.activemq.ActiveMQConnectionFactory; 
  4.  
  5. import javax.jms.*; 
  6. import java.io.Serializable
  7.  
  8.  
  9. public class Consumer { 
  10.  
  11.     //准备发布的这个地址 
  12.     private  static final String PATH="tcp://10.7.182.87:61616"
  13.     //ActiveMQ下的用户名 
  14.     private static final String userName="admin"
  15.     //ActiveMQ下的密码 
  16.     private static final String password="admin"
  17.  
  18.     public static void main(String[] args) throws JMSException { 
  19.         //第一步:创建连接的工厂 
  20.         ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(userName, password, PATH); 
  21.         //通过这个工厂获取连接 
  22.         Connection connection = activeMQConnectionFactory.createConnection(); 
  23.         //第三步:打开这个连接 
  24.         connection.start(); 
  25.         //第四步:创建操作MQ的这个会话 
  26.          
  27.         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); 
  28.         //需要发送消息的目的地(queue操作的是队列) 
  29.         Destination destination=session.createQueue("wqqq"); 
  30.         //创建我们的消费者了 
  31.         MessageConsumer messageConsumer = session.createConsumer(destination); 
  32.         //接下来就可以接收我们的消息了 
  33.         //Message message = messageConsumer.receive(); 
  34.  
  35.         //接收消息并指定这个超时的时间 
  36. //      Message message = messageConsumer.receive(5000); 
  37.  
  38.         //接收消息没有就不等待了 直接over了  不接收了 
  39. //      Message message = messageConsumer.receiveNoWait(); 
  40.  
  41.         //给定当前的路径设置监听器 
  42.         messageConsumer.setMessageListener(new MessageListener() { 
  43.             @Override 
  44.             public void onMessage(Message message) { 
  45.  
  46.                 
  47.  
  48.  
  49.                 
  50.  
  51.                //测试对象类型的消息的发送和接收 
  52.                ObjectMessage objectMessage= (ObjectMessage) message; 
  53.                 try { 
  54.                     User user = (User) objectMessage.getObject(); 
  55.  
  56.                     System.out.println("接收到的数据是:"+user); 
  57.                 } catch (JMSException e) { 
  58.                     e.printStackTrace(); 
  59.                 } 
  60.  
  61.  
  62.                
  63.  
  64.                 try { 
  65.                     //这句话就表示的是客户端来手动的进行应答 
  66.                     message.acknowledge(); 
  67.                 } catch (JMSException e) { 
  68.                     e.printStackTrace(); 
  69.                 } 
  70.  
  71.             } 
  72.         }); 
  73.     } 
  1. package com.qy.mq.topic; 
  2.  
  3. import org.apache.activemq.ActiveMQConnectionFactory; 
  4.  
  5. import javax.jms.*; 
  6.  
  7.  
  8. public class Producer { 
  9.     //准备发布的这个地址 
  10.     private  static final String PATH="tcp://10.7.182.87:61616"
  11.     //ActiveMQ下的用户名 
  12.     private static final String userName="admin"
  13.     //ActiveMQ下的密码 
  14.     private static final String password="admin"
  15.  
  16.     public static void main(String[] args) throws JMSException { 
  17.         //第一步:创建连接的工厂 
  18.         ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(userName, password, PATH); 
  19.         //通过这个工厂获取连接 
  20.         Connection connection = activeMQConnectionFactory.createConnection(); 
  21.         //第三步:打开这个连接 
  22.         connection.start(); 
  23.         //第四步:创建操作MQ的这个会话 
  24.          
  25.         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); 
  26.         //需要发送消息的目的地(下面创建的就应该是主题模型的地址) 
  27.         Destination destination=session.createTopic("topic222"); 
  28.         //生产者来生产这个消息 
  29.         //要有生产者 
  30.         MessageProducer messageProducer = session.createProducer(destination); 
  31.  
  32.         //发送很多的消息到消息队列中去 
  33.         for (int i=0;i<100;i++){ 
  34.             //需要准备发送的消息 
  35.             TextMessage textMessage = session.createTextMessage("我是浅羽:"+i); 
  36.             //接下来就可以发送消息了 
  37.             messageProducer.send(textMessage); 
  38.         } 
  39.     } 
  1. package com.qy.mq.topic; 
  2.  
  3. import org.apache.activemq.ActiveMQConnectionFactory; 
  4.  
  5. import javax.jms.*; 
  6.  
  7.  
  8. public class Consumer { 
  9.  
  10.     //准备发布的这个地址 
  11.     private  static final String PATH="tcp://10.7.182.87:61616"
  12.     //ActiveMQ下的用户名 
  13.     private static final String userName="admin"
  14.     //ActiveMQ下的密码 
  15.     private static final String password="admin"
  16.  
  17.     public static void main(String[] args) throws JMSException { 
  18.         //第一步:创建连接的工厂 
  19.         ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(userName, password, PATH); 
  20.         //通过这个工厂获取连接 
  21.         Connection connection = activeMQConnectionFactory.createConnection(); 
  22.         //第三步:打开这个连接 
  23.         connection.start(); 
  24.         //第四步:创建操作MQ的这个会话 
  25.          
  26.         Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); 
  27.         //需要发送消息的目的地(queue操作的是队列) 
  28.         Destination destination=session.createTopic("topic222"); 
  29.         //创建我们的消费者了 
  30.         MessageConsumer messageConsumer = session.createConsumer(destination); 
  31.         //接下来就可以接收我们的消息了 
  32.  
  33.         //给定当前的路径设置监听器 
  34.         messageConsumer.setMessageListener(new MessageListener() { 
  35.             @Override 
  36.             public void onMessage(Message message) { 
  37.  
  38.                 //我们知道是一个字符串类型的消息 
  39.                 TextMessage textMessage= (TextMessage) message; 
  40.                 //接下来就可以打印这个消息了 
  41.                 try { 
  42.                     System.out.println("消费者1---接收到的消息是:"+textMessage.getText()); 
  43.                 } catch (JMSException e) { 
  44.                     e.printStackTrace(); 
  45.                 } 
  46.  
  47.                 try { 
  48.                     message.acknowledge(); 
  49.                 } catch (JMSException e) { 
  50.                     e.printStackTrace(); 
  51.                 } 
  52.  
  53.             } 
  54.         }); 
  55.     } 

本篇关于ActiveMQ的介绍就先到这里结束了,后续会出更多关于ActiveMQ系列更多文章,谢谢大家支持!

来源:浅羽的IT小屋内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯