activeMQ基础知识

一、   应用场景

用于解耦系统,解决高并发系统反应慢。

二、   模式

1. 点对点(queue)

特性:

l  生产者发送的消息只能被一个消费者消费。

l  消息设置为持久性存储,如果生产者发送消息时消费者不在线,那么无论activeMQ服务器是否重启过,消费者上线时都会接收到缓存中的消息。

消息设置为非持久性存储,如果生产者发送消息时消费者不在线,如果activeMQ服务器没有重启则消费者上线时可以接收到缓存在内存中的消息;如果activeMQ服务器重启过,则消费者接收不到消息。

2. 发布-订阅(topic)

特性:

l  发布订阅模式规定生产者发送的消息可被多个消费者消费。

l  如果生产者发送消息时消费者不在线,当消费者上线时也接收不到消息。

三、   消息类型

根据 JSR 914: JavaTM Message Service (JMS) API ,JMS规范中的消息类型包括TextMessage、BytesMessage、MapMessage、StreamMessage和ObjectMessage 等五种。

l  TextMessage

将字符串存放在消息体内。

//设置
TextMessage message = session.createTextMessage();
message.setText("字符串消息");
//读取
message.getText();

 l  BytesMessage

将字节存放在消息体内。

//设置
byte[] data;
BytesMessage msg = session.createBytesMessage();
msg.wirte(data);
//读取
byte[] msgData = new byte[256];
int bytesRead = msg.readBytes(msgData);

 l  MapMessage

//设置
MapMessage msg = session.createMapMessage();
msg.setString(“CUSTOMER_NAME”,”John”);
msg.setInt(“CUSTOMER_AGE”,12);
//读取
String s = msg.getString(“CUSTOMER_NAME”);
int age = msg.getInt(“CUSTOMER_AGE”);

 l  StreamMessage

//设置
StreamMessage msg = session.createStreamMessage();
msg.writeString(“John”);
msg.writeInt(12);
//读取
String s = msg.readString();
Int age = msg.readInt();

 l  ObjectMessage 

传入可序列化的对象。

四、   持久化存储

1. 持久化为文件

activeMQ默认持久化到文件中

2. 持久化到mysql

l  配置config/activemq.xml文件

在”broker”节点后添加mysql数据源配置

<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq?relaxAutoCommit=true"/>
  <property name="username" value="root"/>
  <property name="password" value="root"/>   <property name="poolPreparedStatements" value="true"/>
</bean>

将默认持久化配置注释掉,添加mysql配置

<!--<persistenceAdapter>
  <kahaDB directory="${activemq.data}/kahadb"/> </persistenceAdapter>
-->
<persistenceAdapter>
  <jdbcPersistenceAdapter dataSource="#mysqlDataSource"/> </persistenceAdapter>

l  将mysql的驱动jar包以及相关连接池的jar包放在lib目录下

l  重新启动activemq,然后数据库中会自动建立三张表,其中activemq_msgs存储离线消息。

 

posted @ 2016-08-26 11:01  Mr。Guo  阅读(300)  评论(0编辑  收藏  举报