ActiveMQ简介
ActiveMQ是Apache研发的消息中间件,支持JMS1.1和J2EE1.4规范的JMS Provider实现
主要应用于分布式系统架构中,帮助构建高可用,高性能,可伸缩的企业级面向消息服务的系统
ActiveMQ应用场景
1.异步发送消息
2.应用间解耦
3.流量削锋
ActiveMQ安装
tar -zxvf **.tar.gz
./activemq start 启动服务
访问页面 ip:port
注意 此版本需要jdk1.8及以上
JMS基本概念
java message service 是java平台中关于面向消息中间件的API,用于两个应用程序之间,或者分布式系统中发送消息,进行异步通信 。
类似JDBC,由厂商去实现
JMS是一个与具体平台无关的API,绝大多数MOM(message oriented middleware)面向消息中间件提供商都对JMS提供了支持。
下图就是MOM的模型
MOM:面向消息的中间件,使用消息传送提供者来协调消息传输操作。 MOM需要提供API和管理工具。 客户端调用api。 把消息发送到消息传送提供者指定的目的地
在消息发送之后,客户端会技术执行其他的工作。并且在接收方收到这个消息确认之前。提供者一直保留该消息
JMS规范
消息传递域:
* 点对点 p2p
1.每个消息只能被消费一次,也就是只能有一个消费者
2.消息的生产者和消费者没有时间上的相关性,无论消费者在生产者发送消息的时候是否是运行状态,都可以提取消息。
* 发布定于 pub/sub
1.每个消息可以有多个消费者
2.消息的生产者和消费者之间存在时间上的相关性,订阅一个主题的消费者只能消费自它订阅之后发布的消息。JMS规范允许提供客户端创建持久订阅
简单的例子:
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-all</artifactId><version>5.15.0</version></dependency>
package org.maple.producer;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;/** * @author mapleins * @Date 2018-12-20 19:46 * @Desc 生产者 **/public class Producer {public static void main(String[] args) {//创建连接工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.0.110:61616");//创建连接Connection connection = null;try {//建立连接connection = connectionFactory.createConnection();connection.start();//通过连接创建会话Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);//通过Session创建队列,如果存在则不会再创建//destination是目的地Destination destination = session.createQueue("first queue");//创建消息发送者MessageProducer producer =session.createProducer(destination);//创建消息TextMessage textMessage = session.createTextMessage("hello , activemq");producer.send(textMessage);//提交会话session.commit();//关闭会话session.close();} catch (JMSException e) {e.printStackTrace();} finally {if(connection!=null){try {connection.close();} catch (JMSException e) {e.printStackTrace();}}}}}
package org.maple.consumer;import org.apache.activemq.ActiveMQConnectionFactory;import org.apache.activemq.ActiveMQMessageConsumer;import javax.jms.*;import javax.xml.soap.Text;/** * @author mapleins * @Date 2018-12-20 19:54 * @Desc 消费者 **/public class Consumer {public static void main(String[] args) {//创建连接工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.0.110:61616");//创建连接Connection connection = null;try {//建立连接connection = connectionFactory.createConnection();connection.start();//通过连接创建会话Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);//通过Session创建队列,如果存在则不会再创建//destination是目的地Destination destination = session.createQueue("first queue");//创建消费者MessageConsumer consumer = session.createConsumer(destination);//接收消息TextMessage message = (TextMessage) consumer.receive();System.out.println(message.getText());//提交会话session.commit();//关闭会话session.close();} catch (JMSException e) {e.printStackTrace();} finally {if(connection!=null){try {connection.close();} catch (JMSException e) {e.printStackTrace();}}}}}
JMS API
ConnectionFactory 连接工厂
Connection 封装客户端与JMS provider之间的一个虚拟的连接
Session 生产和消费消息的一个单线程上下文; 用于创建producer、consumer、message、queue..
Destination 消息发送或者消息接收的目的地
MessageProducer/consumer 消息生产者/消费者
消息组成
消息头
包含消息的识别信息和路由信息
消息体
TextMessage
MapMessage
BytesMessage
StreamMessage 输入输出流
ObjectMessage 可序列化对象
属性
作者:mapleins
来源链接:https://www.cnblogs.com/mapleins/p/10151462.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。