关于activemq
activemq全名Apache ActiveMQ,是Apache下的开放源代码的消息中间件;由于ActiveMQ基于java语言开发,因此只需要操作系统支持Java虚拟机,配置java环境,ActiveMQ便可执行。 Apache ActiveMQ是最流行的开源、多协议、基于 Java 的消息代理。支持行业标准协议,因此用户可以在各种语言和平台的客户端中选择。从用 多种语言编写的客户端连接。使用AMQP协议集成多平台应用程序。ActiveMQ 是支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。 在代码开发中,使用JMS编程模型,案例代码在后面
何谓JMS?
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。 JMS是一种与厂商无关的 API,用来访问收发系统消息,它类似于JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ。 JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JMS客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本(TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。
activemq的下载链接:https://activemq.apache.org/components/classic/download/
Windows版下载与使用
1.进入链接地址,选择你需要下载的版本,我们这里下载的是当前最新版本 2.下载完成之后,解压压缩包到指定目录,如图 3.进入bin目录,可选32位或者64位,我的机器为64位,因此进入对应目录,双击activemq.bat启动服务,默认端口8161 4.管理界面:localhost:8161,默认用户密码都是admin 这里是我之前创建的一个新的队列,并批量插入了100条消息,并对参数进行说明
消息模型topic和queue
topic和queue是JMS的两种消息模型,Destination接口其中的两个实现类实例,可通过Session接口的实现类实例来创建,生产者代码如下,这里我创建的目的地类型为queue
@SuppressWarnings("all")
public class Sender {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory("admin","admin","tcp://localhost:61616");
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination queue = session.createQueue("user");
MessageProducer producer = session.createProducer(queue);
TextMessage textMessage;
for (int i = 0; i < 100; i++) {
textMessage = session.createTextMessage("第" + i + "条消息");
producer.send(textMessage);
Thread.sleep(3000);
}
connection.close();
System.out.println("System.exit..............");
}
}
队列(Queue)和主题(Topic)是JMS支持的两种消息传递模型 queue是点对点(point-to-point)的消息传递与消费方式,消息目的地为queue,可同时存在多个provider(消息生产者)和多个consumer(消费者),消息首先传送到指定队列中,一条消息只能被一个消费者所消费,该消息传递模型为轮询,消息不是主动发送给消费者,而是消费者监听队列并请求获取消息,多个消费者轮流获得某个队列对消息。 当消费者不存在时,消息会一直保存,直到有消费者消费掉
topic是发布/订阅(pub/sub)的消息传递消费方式,消息目的地为topic,也包含多个消费者与生产者,消息将会发送到订阅同一主题的多个消费者,相当于在同一会议室在听的领导发言,那么迟到的成员就听不到发言了。注意在该模型中,消息是自动广播,消费者无需主动请求或者轮询方式去获取消息。 当生产者发布消息,不管是否有消费者。都不会保存消息 一定要先有消息的消费者,后有消息的生产者。
JMS消息模型对比
type | topic | queue |
---|
有无状态 | 无状态,topic数据默认不落地, | queue消息默认在mq服务器上以文件形式保存,activemq中,数据保存在data目录的kahadb下,也可以持久化到DB存储,在conf目录下的activemq.xml文件中加入数据源 | 完整性 | 不能保证每条消息Subscriber都能接收到 | 可以保证每条数据都能被接收到,消息可以设置超时或者不超时 | 消息是否会丢失 | 一般,message发布之后,只有正在监听该topic的接收者才能够接收到 | message发送到目的地queue,consumer可以异步接收到消息,如果暂时未取出消息,在不超时前提下,不会丢失,Number Of Pending Messages为未出队的消息数量 | 发布接受策略 | 一对多的发布接受策略 | 一对一的发布接受策略,消费完毕的message采取删除或其他操作 |
期待与大家交流,可以在博客私信我哦。 感谢阅读,原创文本,如有不正确的地方请指教! 如果这篇文章有帮到你,记得点赞支持下哦
|