activemq下载安装(windows版)与实例创建,JMS模型介绍

关于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 {
        //1.获取连接工厂,输入用户名密码
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory("admin","admin","tcp://localhost:61616");
        //2.获取一个向Activemq的连接
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        //3.获取session(参数:是否开启事务,确认机制)
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //4.找目的地,获取destination,消费端也会从这个目的地取消息
        Destination queue = session.createQueue("user");
        //5.producer::消息创建者
        MessageProducer producer = session.createProducer(queue);
        //6.是否持久化消息,默认PERSISTENT
        //producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        TextMessage textMessage;
        //7.向目的地(queue)写入消息
        for (int i = 0; i < 100; i++) {
            textMessage = session.createTextMessage("第" + i + "条消息");
            producer.send(textMessage);
            Thread.sleep(3000);
            //session.commit();
        }
        //6.关闭连接
        connection.close();
        System.out.println("System.exit..............");
    }

}

队列(Queue)和主题(Topic)是JMS支持的两种消息传递模型
queue点对点(point-to-point)的消息传递与消费方式,消息目的地为queue,可同时存在多个provider(消息生产者)和多个consumer(消费者),消息首先传送到指定队列中,一条消息只能被一个消费者所消费,该消息传递模型为轮询,消息不是主动发送给消费者,而是消费者监听队列并请求获取消息,多个消费者轮流获得某个队列对消息。
当消费者不存在时,消息会一直保存,直到有消费者消费掉
在这里插入图片描述

topic发布/订阅(pub/sub)的消息传递消费方式,消息目的地为topic,也包含多个消费者与生产者,消息将会发送到订阅同一主题的多个消费者,相当于在同一会议室在听的领导发言,那么迟到的成员就听不到发言了。注意在该模型中,消息是自动广播,消费者无需主动请求或者轮询方式去获取消息。
当生产者发布消息,不管是否有消费者。都不会保存消息 一定要先有消息的消费者,后有消息的生产者。
在这里插入图片描述

JMS消息模型对比

typetopicqueue
有无状态无状态,topic数据默认不落地,queue消息默认在mq服务器上以文件形式保存,activemq中,数据保存在data目录的kahadb下,也可以持久化到DB存储,在conf目录下的activemq.xml文件中加入数据源
完整性不能保证每条消息Subscriber都能接收到可以保证每条数据都能被接收到,消息可以设置超时或者不超时
消息是否会丢失一般,message发布之后,只有正在监听该topic的接收者才能够接收到message发送到目的地queue,consumer可以异步接收到消息,如果暂时未取出消息,在不超时前提下,不会丢失,Number Of Pending Messages为未出队的消息数量
发布接受策略一对多的发布接受策略一对一的发布接受策略,消费完毕的message采取删除或其他操作

期待与大家交流,可以在博客私信我哦。
感谢阅读,原创文本,如有不正确的地方请指教!
如果这篇文章有帮到你,记得点赞支持下哦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值