消息中间件-2(ActiveMQ使用1)
创始人
2025-05-29 06:39:25
0

1、JMS和ActiveMQ

JMS(Java Message Service)是java平台上有关与面向消息中间件的技术规范,实际上是一套api接口,他便与消息系统中的Java应用程序进行消息交换,并且提供标准的产生、发送、接收消息的接口简化

JMS规范

1)连接工厂。
2)JMS连接。
3)JMS会话。
4)JMS目的。
5)JMS生产者和消费者。

JMS中消息的定义

消息头
消息属性
消息体

JMS消息模型

point to point(点对点)

在这里插入图片描述
每条队列里面的消息只能被一个消费者消费,消息一旦被消费,消息就不在消息队列中

Topic主题(发布订阅模式)

在这里插入图片描述
topic的消息会被所有的消费者消费

2、ActiveMQ安装、部署和运行

在这里插入图片描述

下载 Windows版 ActiveMQ,解压,运行bin目录下的activemq.bat即可。Linux下操作类似(进入bin目录运行./activemq start启动,./activemq stop关闭)。
下载地址:http://activemq.apache.org/activemq-580-release.html
运行后在浏览器中访问http://127.0.0.1:8161/admin,即可看到ActiveMQ的管理控制台
ActiveMQ中,61616为服务端口,8161为管理控制台端口。
启动成功界面如下:
在这里插入图片描述

3、使用ActiveMQ

1)原生API使用

详情见代码:no-spring下usemq包
1、pom文件配置

  org.apache.activemqactivemq-all5.9.0

2、消息生成端代码

package tan.usemq;import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;/*** 生产者端*/
public class JmsProducer {/*默认连接用户名*/private static final String USERNAME= ActiveMQConnection.DEFAULT_USER;/*默认连接密码*/private static final String PASSWORD= ActiveMQConnection.DEFAULT_PASSWORD;/*默认连接地址*/private static final String BROKEURL= ActiveMQConnection.DEFAULT_BROKER_URL;/*发送数量*/private static final int SENDNUM = 3;public static void main(String[] args){/*连接工厂*/ConnectionFactory connectionFactory;/*连接*/Connection connection = null;/*会话*/Session session;/*消息的目的地*/Destination destination;/*消息的生产者*/MessageProducer messageProducer;/*实例化连接工厂*/connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKEURL);try {/*** 通过连接工厂获取连接*/connection = connectionFactory.createConnection();/*** 启动连接*/connection.start();/*** 创建session会话,* 第一个参数是否使用事务,当消息发送者向消息提供者发送消息时,消息发送者等待消息代理的确认* 没有回应则抛出异常,消息发送程序会处理这个错误* 第二个参数消息的确认模式:* AUTO_ACKNOWLEDGE:指定消息接收者在每次收到消息时自动发送确认,* 消息只向目标发送一次,但传输过程中可能因为错误而丢失消息(会通知消息提供者收到消息)* CLIENT_ACKNOWLEDGE:由消息接收者确认收到消息,通过调用消息的acknowledge()方法* DUPS_OK_ACKNOWLEDGE:指定消息提供者在消息接收者没有确认发送时重新发送消息* (这种确认不在乎接收者收到重复的消息)*/session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);/*** 创建一个名为HelloWorld的消息队列*///创建一个topic// destination = session.createTopic("HelloTopic");destination = session.createQueue("HelloActiveMqQueue");/*** 创建消息生产者*/messageProducer = session.createProducer(destination);/*** 循环发送消息*/for (int i = 0; i < SENDNUM; i++){String msg = "发送消息" + i + " " + System.currentTimeMillis();TextMessage textMessage = session.createTextMessage(msg);System.out.println("标准用法"+ msg);/*** 消息生产者发送消息*/messageProducer.send(textMessage);}}catch (Exception e){e.printStackTrace();}finally {//关闭mq连接if(connection != null){try {connection.close();} catch (JMSException e) {e.printStackTrace();}}}}}

3、同步消息消费端

package tan.usemq;import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;/*** 消费者端-同步接受消息*/
public class JmsConsumer {/*默认连接用户名*/private static final String USERNAME= ActiveMQConnection.DEFAULT_USER;/* 默认连接密码*/private static final String PASSWORD= ActiveMQConnection.DEFAULT_PASSWORD;/* 默认连接地址*/private static final String BROKEURL= ActiveMQConnection.DEFAULT_BROKER_URL;public static void main(String[] args){/* 连接工厂*/ConnectionFactory connectionFactory;/* 连接*/Connection connection = null;/* 会话*/Session session;/* 消息的目的地*/Destination destination;/*消息的消费者*/MessageConsumer messageConsumer;/*实例化连接工厂*/connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKEURL);try{/*通过连接工厂获取连接*/connection = connectionFactory.createConnection();/*启动连接*/connection.start();/*创建session*/session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);/*创建一个名为HelloWorld的消息队列*/destination = session.createQueue("HelloActiveMqQueue");//创建一个topic// destination = session.createTopic("HelloTopic");/*创建消息消费者*/messageConsumer = session.createConsumer(destination);Message message;while ((message = messageConsumer.receive()) != null){System.out.println(((TextMessage)message).getText());}}catch (JMSException e){e.printStackTrace();}finally {if (connection != null) {try {connection.close();} catch (JMSException e) {e.printStackTrace();}}}}
}

4、异步消费端代码

package tan.usemq;import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;/*** 消费者端--异步接收消息*/
public class JmsConsumerAsyn {/*默认连接用户名*/private static final String USERNAME= ActiveMQConnection.DEFAULT_USER;/* 默认连接密码*/private static final String PASSWORD= ActiveMQConnection.DEFAULT_PASSWORD;/* 默认连接地址*/private static final String BROKEURL= ActiveMQConnection.DEFAULT_BROKER_URL;public static void main(String[] args){/* 连接工厂*/ConnectionFactory connectionFactory;/* 连接*/Connection connection = null;/* 会话*/Session session;/* 消息的目的地*/Destination destination;/*消息的消费者*/MessageConsumer messageConsumer;/*实例化连接工厂*/connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKEURL);try{/*通过连接工厂获取连接*/connection = connectionFactory.createConnection();/*启动连接*/connection.start();/*创建session*/session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);/*创建一个名为HelloWorld的消息队列*///destination = session.createQueue("HelloActiveMqQueue");//创建一个topicdestination = session.createTopic("HelloTopic");/*创建消息消费者*/messageConsumer = session.createConsumer(destination);/*设置消费者监听器,监听消息*/messageConsumer.setMessageListener(new MessageListener() {public void onMessage(Message message) {try {System.out.println(((TextMessage) message).getText());} catch (JMSException e) {e.printStackTrace();}}});}catch (JMSException e){e.printStackTrace();}}
}

2)与Spring结合

详情见代码:am_with_spring_p;am_with_spring_c

3)与SpringBoot结合

详情见代码:am_with_springboot

4、请求应答模式(request-reponse模式)

在这里插入图片描述

5、用户注册的异步处理代码

在这里插入图片描述
在这里插入图片描述
1、串行实现
2、并行实现
3、使用MQ实现
4、使用MQ实现消息回调
详情见代码:asyncApp

相关内容

热门资讯

你看! 那都市里的雾霾 雾霾...  我是一只麻雀,我在人类世界中穿梭。他们说人类的智慧是所有动物中最高的。高等动物就是人类对自己的称呼...
有关于环保的一些诗歌 中学生环... 1、《环保》  立春刚过寸草绿,  傍晚时分北风急。  浮尘扬沙阵阵落,  环保确系大问题。  2、...
“地球只有一个”,让我们共同保... (一)小水n滴,一滴滴, 汇成江河长千里。 小米粒,一粒粒, 堆成粮堆高千米, 小水滴,小米粒, 积...
让我们生命的每一天,天天都是环...  每年6月5日是环境日,保护环境意识是现代人的重要标志。保护环境,人人有责,为了能让我们的环境优美,...
如何获取机器人方向新信息资讯-... 对于学生就业而言:机器人方向新信息资讯对学生就业的用途在于为学生提供了更多的就业机会和...
在centos上安装pycha... 1.下载pycharm安装包 1)切换到root用户,命令:...
节约资源,保护环境,做保护地球...   保护环境,从身边做起  人类自诞生起,一切衣食往行及生产,生活,无不依赖于我们所生存的这个星球,...
没有地球的健康就没有人类的健康...  环境保护(简称环保)是在个人、组织或政府层面,为大自然和人类福祉而保护自然环境的行为,指人类为解决...
环保小知识,你需要知道! 企业...  1、节约用水  随时关上水龙头,别让水白流;看见漏水的龙头一定要拧紧它。尽量使用二次水。例如,淘米...
保护水源就是保护生命 生命和水...  我国是世界上12个贫水国家之一,淡水资源还不到世界人均水量的 1/4。全国600多个城市半数以上缺...
【BMS】电池包低温加热技术 1、目的: 提高锂电池低温充放电性能。(如电动车在寒冷天气续航变短、启动...
GeoWave 以下部分内容是翻译的。英文太烂,应该是很不准确的。 一、什么是GeoWave GeoW...
保护水源,保护生命,保护地球 ...  我国是世界上12个贫水国家之一,淡水资源还不到世界人均水量的 1/4。全国600多个城市半数以上缺...
最新或2023(历届)学雷锋手... 【学雷锋手抄报内容:雷锋名言警句】  1) 我愿永远做一个螺丝钉。  2) 谁要是游戏人生,他就一事...
低碳生活,其实就是这么简单。 ... 这个月,我们学校开展了一个活动——绿色田园,节能环保小达人。其实我们家早就开展了一系列的环保行动。 ...
最新或2023(历届)小学生学... 雷锋(1940~1962)  中国人民解放军全心全意为人民服务的楷模,共产主义战士。湖南望城县人。1...
从小事做起,保护好赖以生存的地...  谁都知道,地球是我们的家园,与我们的生活息息相关。人类大量破坏环境,已经把我们美丽的地球毁坏的不像...
基础入门 HTTP数据包Pos... 文章目录数据-方法&头部&状态码请求requestResponse状态码案例-文件探针&登录爆破工具...
【每日一题Day151】LC1... 执行操作后字典序最小的字符串【LC1625】 给你一个字符串 s 以及两个整数 a 和 b 。其中...
最新或2023(历届)小学生学... 【学习雷锋好榜样】  学习雷锋好榜样  忠于革命忠于党  爱憎分明不忘本  立场坚定斗志强  立场坚...