ActiveMQ学习

本文深入探讨了ActiveMQ,一个Apache开源的消息中间件,实现JMS 1.1规范。文章介绍了JMS的基本概念,包括点对点(P2P)和发布/订阅(Pub/Sub)两种消息传递方式。接着,详细阐述了ActiveMQ的存储机制,如KahaDB、AMQ、JDBC和内存存储。最后,讨论了ActiveMQ的部署模式,如单例、无共享主从和共享存储主从模式,以及网络连接和发现策略。
摘要由CSDN通过智能技术生成

一、基础概念

1.ActiveMQ

ActiveMQ 是由 Apache 出品的一款开源 消息中间件,实现了 JMS 1.1 并提供了很多附加的特性,比如 JMX 管理、主从管理、消息组通信、消息优先级、延迟接收消息、虚拟接收者、消息持久化、消息队列监控。

2.JMS 叫做 Java 消息服务(Java Message Service),是 Java 平台上有关面向消息中间件的技术规范,旨在通过提供标准的产生、发送、接收和处理消息的 API 简化企业应用的开发,类似于 JDBC 和关系型数据库通信方式的抽象。

JMS消息传递方式有两种:点对点(P2P)、发布/订阅(Pub/Sub)。

3.P2P和Pub/Sub

P2P (点对点)消息域使用 queue 作为 Destination(目标,消息被寻址、发送以及接收的对象),消息可以被同步或异步的发送和接收,每个消息只会给一个 Consumer 传送一次。类似于一对一的qq聊天。

Consumer 可以使用 MessageConsumer.receive() 同步地接收消息,也可以通过使用MessageConsumer.setMessageListener() 注册一个 MessageListener 实现异步接收。

Pub/Sub(发布/订阅,Publish/Subscribe)消息域使用 topic 作为 Destination,发布者向 topic 发送消息,订阅者注册接收来自 topic 的消息。发送到 topic 的任何消息都将自动传递给所有订阅者。接收方式(同步和异步)与 P2P 域相同。
除非显式指定,否则 topic 不会为订阅者保留消息。当然,这可以通过持久化(Durable)订阅来实现消息的保存。这种情况下,当订阅者与 Provider 断开时,Provider 会为它存储消息。当持久化订阅者重新连接时,将会受到所有的断连期间未消费的消息。

类似与qq群聊天,只是默认未在线用户上线后无法收到之前发布者已发送的消息,通过持久化订阅后,上线后可收到不在线时发布者发送的消息。

二、实现

1.使用JMS创建应用程序的通用步骤

  • 获取连接工厂
  • 使用连接工厂创建连接
  • 启动连接
  • 从连接创建会话
  • 获取Destination
  • 创建Producer或创建Producer 创建message
  • 创建 Consumer,或发送或接收message  注册消息监听器(可选)
  • 发送或接收 message
  • 关闭资源(connection, session, producer, consumer 等)

对应代码:

public class JMSDemo {
        ConnectionFactory connectionFactory;
        Connection connection;
        Session session;
        Destination destination;
        MessageProducer producer;
        MessageConsumer consumer;
        Message message;
        boolean useTransaction = false;
        try {
                Context ctx = new InitialContext();
                connectionFactory = (ConnectionFactory) ctx.lookup("ConnectionFactoryName");
                //使用ActiveMQ时:connectionFactory = new ActiveMQConnectionFactory(user, password, getOptimizeBrokerUrl(broker));
                connection = connectionFactory.createConnection();
                connection.start();
                session = connection.createSession(useTransaction, Session.AUTO_ACKNOWLEDGE);
                destination = session.createQueue("TEST.QUEUE");
                //生产者发送消息
                producer &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值