1 基础概念
ActiveMQ:是Apache出品,最流行的,能力强劲的开源消息总线。是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。
JMS(Java消息服务):是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
2 JMS消息模式
2.1 点对点或队列模式
每个消息只能有一个消费者。消息的生产者和消费者之间没有时间上的相关性,无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。
2.2 Pub/Sub 发布/订阅模式
每个消息可以有多个消费者。生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。
3 Broker节点
代表一个运行MQ的节点。
4. Transport传输方式
ActiveMQ目前支持的Transport有:VM Transport、TCP Transport、NIO Transport、SSL Transport、Peer Transport、UDP Transport、Multicast Transport、HTTP and HTTPS Transport、WebSockets Transport、Failover Transport、Fanout Transport、Discovery Transport、ZeroConf Transport等。
1) VM Transport:允许客户端和Broker直接在VM内部通信,采用的连接不是Socket连接,而是直接的方法调用,从而避免了网络传输的开销。应用场景也仅限于Broker和客户端在同一JVM环境下。
2) TCP Transport:客户端通过TCP Socket连接到远程Broker。配置语法:
tcp://hostname:port?transportOptions
3) HTTP and HTTPS Transport:允许客户端使用REST或者Ajax的方式进行连接。这意味着可以直接使用JavaScript向ActiveMQ发送消息。
4) WebSockets Transport:允许客户端通过HTML5标准的WebSockets方式连接到Broker。
5 持久化存储 Persistence
消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重新启动后仍然可以将消息发送出去,如果把这种持久化和ReliableMessaging结合起来应该是很好的保证了消息的可靠传送。
消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等,然后试图将消息发送给接收者,发送成功则将消息从存储中删除,失败则继续尝试。消息中心启动以后首先要检查制定的存储位置,如果有未发送成功的消息,则需要把消息发送出去。
5.1 AMQ Message Store
AMQ是一种文件存储形式,它具有写入速度快和容易恢复的特点。消息存储在一个个文件中,文件的默认大小为32M,如果一条消息的大小超过了32M,那么这个值必须设置大一点。当一个存储文件中的消息已经全部被消费,那么这个文件将被标识为可删除,在下一个清除阶段,这个文件被删除。AMQ适用于ActiveMQ5.3之前的版本。
5.2 Kaha Persistence(持久化为文件)
KahaDB,是一个基于文件支持事务的消息存储器,是一个可靠,高性能,可扩展的消息存储器。KahaDB是基于文件的本地数据库储存形式,虽然没有AMQ的速度快,但是它具有强扩展性,恢复的时间比AMQ短,从5.4版本之后KahaDB做为默认的持久化方式。
默认配置如下:
<persistenceAdapter>
<kahaDB directory="activemq-data" journalMaxFileLength="32mb"/>
</persistenceAdapter>
// MessageProducer:消息发送者
MessageProducer producer;
// 设置不持久化,实际根据项目决定
// PERSISTENT:保存到磁盘,consumer消费之后,message被删除。
// NON_PERSISTENT:保存到内存,消费之后message被清除。
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 注意:堆积的消息太多可能导致内存溢出。
宕机后重新启动MQ:
5.3 JDBC Persistence(持久化为数据库)
可以将消息存储到数据库中,例如:MySQL、SQL Server、Oracle、DB2。
配置JDBC适配器:
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="false" />
</persistenceAdapter>
将数据持久化到MySQL中。
5.3.1 先从http://dev.mysql.com/downloads/connector/j/下载mysql-connector-java-5.*.*-
bin.jar包放到:
D:\software\apache-activemq-5.14.2\lib目录下。
5.3.2 apache-activemq-5.14.2\conf\activemq.xml配置
持久化方式:
<!--
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
-->
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#mysql-ds" useDatabaseLock="false"/>
</persistenceAdapter>
数据源:
放到broker标签外边
<!-- MySQL DataSource -->
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
启动后自动创建持久化mysql数据库的3张表:
activemq_acks:ActiveMQ的签收信息。
activemq_lock:ActiveMQ的锁信息。
activemq_msgs:ActiveMQ的消息的信息
具体文件见
http://572327713.iteye.com/blog/2347874
5.4 LevelDB Persistence
这种文件系统是从ActiveMQ5.8之后引进的,它和KahaDB非常相似,也是基于文件的本地数据库储存形式,但是它提供比KahaDB更快的持久性。与KahaDB不同的是,它不是使用传统的B-树来实现对日志数据的提前写,而是使用基于索引的LevelDB。
默认配置如下:
<persistenceAdapter>
<levelDBdirectory="activemq-data"/>
</persistenceAdapter>
http://blog.csdn.net/kobejayandy/article/details/50736479
http://blog.csdn.net/boonya/article/details/51259068
- 大小: 16.5 KB
- 大小: 104.8 KB
- 大小: 73.3 KB
分享到:
相关推荐
**一、JMS基本概念** JMS(Java Message Service)是Java平台中用于进行异步消息传输的标准接口。它定义了两种主要的消息模型: 1. **Point-to-Point (P2P)**:点对点模型,消息被发送到一个特定的队列,由一个...
1. **ActiveMQ基本概念** - **消息**:在ActiveMQ中,消息是数据传输的基本单元,它封装了要传递的信息,具有独立于发送者和接收者的生命周期。 - **生产者**:创建并发送消息的应用程序。 - **消费者**:接收并...
1. **ActiveMQ基本概念** - **消息队列(Message Queue)**: 是一种用于存储和转发消息的数据结构,它将生产者和消费者解耦,允许它们独立工作。 - **生产者(Producer)**: 负责创建并发送消息到消息队列。 - **...
一、ActiveMQ基本概念 1. 消息与队列:在ActiveMQ中,消息是数据传输的载体,它包含了要传递的信息。队列(Queue)则是一种存储和转发消息的结构,遵循先进先出(FIFO)原则,每个消息只能被一个消费者接收。 2. ...
1. **ActiveMQ基本概念**:了解ActiveMQ的基本结构,包括Broker(消息代理)、Producer(生产者)、Consumer(消费者)、Queue(队列)和Topic(主题)等概念。 2. **JMS规范**:熟悉Java Message Service规范,...
1. **ActiveMQ基本概念** - **消息队列(Message Queue)**:ActiveMQ的核心是消息队列,它存储并转发消息,确保消息的可靠传输。 - **生产者(Producer)**:创建并发送消息到队列的应用程序。 - **消费者...
1. **ActiveMQ基本概念** - **消息中间件**:ActiveMQ作为一个消息中间件,负责在分布式系统中传递消息,解耦生产者和消费者。 - **JMS(Java Message Service)**:JMS是Java平台上的标准,定义了消息生产和消费...
1. **ActiveMQ基本概念** - **消息中间件**:ActiveMQ是Apache软件基金会开发的一个开源项目,作为消息中间件,它的主要任务是解耦生产者和消费者,确保消息的可靠传输。 - **JMS(Java Message Service)**:虽然...
一、ActiveMQ基本概念 1. 消息队列:ActiveMQ的核心功能是作为消息队列,它允许应用程序之间通过异步方式交换数据,解耦了生产者和消费者。 2. JMS:Java Message Service是一个Java平台上的API,定义了与消息传递...
一、ActiveMQ基本概念 1. 消息中间件:ActiveMQ扮演着消息代理的角色,它允许应用程序之间通过消息进行通信,而无需直接知道对方的存在。这种解耦使得系统更加灵活和可扩展。 2. JMS(Java Message Service):JMS...
1. **ActiveMQ基本概念**:ActiveMQ作为消息代理,它接收和转发消息,确保消息在生产者和消费者之间正确传递。它支持多种协议,如OpenWire、STOMP、AMQP和MQTT,这使得不同平台的应用可以方便地进行交互。 2. **JMS...
### 二、理解 ActiveMQ 基本概念 1. **Broker**:ActiveMQ 的核心组件,负责接收、存储、转发和传递消息。 2. **Producer**:消息的发送者,向 Broker 发送消息。 3. **Consumer**:消息的接收者,从 Broker 接收...
1. **ActiveMQ基本概念** - **消息队列**:ActiveMQ基于的消息传输模型是基于消息队列的,它将生产者与消费者解耦,生产者发送消息到队列,消费者可以从队列中获取并处理消息。 - **JMS接口**:ActiveMQ提供了对...
一、ActiveMQ基本概念 1. **消息**:在MQ系统中,数据以消息的形式进行传输,它包含要传递的信息和元数据。 2. **生产者**:创建并发送消息的应用程序或组件。 3. **消费者**:接收并处理消息的应用程序或组件。 ...
**一、ActiveMQ基本概念** 在开始讨论代码用例之前,我们需要了解ActiveMQ的基本概念: 1. **消息**:在分布式系统中,消息是数据传输的载体,它们通过消息代理(如ActiveMQ)在生产者和消费者之间传递。 2. **...
1. **Apache ActiveMQ基本概念**: - **JMS(Java Message Service)**:JMS是Java平台中用于在分布式系统之间交换异步消息的标准API。它提供了一种统一的接口,使得不同的消息中间件产品能够互操作。 - **Message...
**一、ActiveMQ基本概念** 1. **生产者(Producer)**:发布消息到消息队列的客户端。 2. **消费者(Consumer)**:从消息队列中接收并处理消息的客户端。 3. **消息(Message)**:在生产者和消费者之间传输的数据...
1. **ActiveMQ基本概念**: - **消息中间件**:ActiveMQ作为消息中间件,负责在分布式系统中传输消息,解耦应用之间的通信。 - **JMS(Java Message Service)**:JMS是Java平台上的标准接口,定义了生产、发送、...
ActiveMQ基本概念 - **消息**: 在ActiveMQ中,消息是数据传输的基本单元,包含一个主题(Topic)或队列(Queue)以及消息体。 - **生产者**: 创建并发送消息的应用程序。 - **消费者**: 接收并处理消息的应用程序...
1. **ActiveMQ基本概念**: - **消息队列**:ActiveMQ的核心就是消息队列,它允许应用程序之间通过发送和接收消息进行通信,而无需直接调用对方。 - **生产者与消费者**:在聊天室场景中,用户发送的消息由生产者...