jms mysql_JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中

Java代码

INFO | ActiveMQ5.5.0JMS Message Broker (localhost) is starting

......

INFO | Listeningforconnections at: tcp://SHI-AP33382A:61616INFO | ActiveMQ 5.5.0 JMS Message Broker (localhost) is starting

......

INFO | Listening for connections at: tcp://SHI-AP33382A:61616

当看到上面的日志输出时,表示AMQ已经启动了;

4、默认情况下,AMQ使用conf/activemq.xml作为配置文件,我们可修改它,然后以 bin/activemq.bat xbean:./conf/my.xml启动AMQ;

三、持久化消息(MySQL)

因为接下来我们修改AMQ的默认配置文件,所以先备份conf/activemq.xml文件;

1、建立MySQL数据库:要使用MySQL存储消息,必须告诉AMQ数据源:

Sql代码

/**

* 创建数据库

*/

CREATEDATABASEmiscDEFAULTCHARSET=UTF8;

/**

* 创建用户和授权

*/

GRANTALLPRIVILEGESONmisc.*TO'misc_root'@'%'IDENTIFIEDBY'misc_root_pwd';

GRANTALLPRIVILEGESONmisc.*TO'misc_root'@'localhost'IDENTIFIEDBY'misc_root_pwd';/**

* 创建数据库

*/

CREATE DATABASE misc DEFAULT CHARSET=UTF8;

/**

* 创建用户和授权

*/

GRANT ALL PRIVILEGES ON misc.* TO 'misc_root'@'%' IDENTIFIED BY 'misc_root_pwd';

GRANT ALL PRIVILEGES ON misc.* TO 'misc_root'@'localhost' IDENTIFIED BY 'misc_root_pwd';

通过上面的SQL脚本,我们建立了名为misc的数据库,并且把所有权限都赋予了misc_root的用户;

由于AMQ需要在本数据库中建立数据表,因此用户的权限必须具有建表权限;

2、添加MySQL数据源:默认情况下,AMQ使用KahaDB存储(我对KahaDB不了解),注释到KahaDB的配置方式,改为MySQL的:

Xml代码

该配置表示,我们将要使用一个叫做“MySQL-DS”的JDBC数据源;

3、配置MySQL数据源:在节点后面,增加MySQL数据源配置:

Xml代码

其实这就是一个Spring的Bean的配置,注意id与上面的保持一致;

整个AMQ的配置文件内容为:

Xml代码

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

classpath:/META-INF/credentials.properties

"producerFlowControl="true"memoryLimit="1mb">

"producerFlowControl="true"memoryLimit="1mb">

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

classpath:/META-INF/credentials.properties

四、查看MySQL数据表

重新启动AMQ,启动完成之后,我们发现,misc数据库多了3张数据表:

Sql代码

mysql> SHOW tables;

+----------------+

| Tables_in_misc |

+----------------+

| activemq_acks  |

| activemq_lock  |

| activemq_msgs  |

+----------------+mysql> SHOW tables;

+----------------+

| Tables_in_misc |

+----------------+

| activemq_acks |

| activemq_lock |

| activemq_msgs |

+----------------+

数据表activemq_msgs即为持久化消息表;

五、持久化消息

系统启动完毕之后,消息表中内容为空:

Sql代码

mysql>SELECT*FROMactivemq_msgs;

Emptysetmysql> SELECT * FROM activemq_msgs;

Empty set

1、发送消息:打开http://127.0.0.1:8161/demo/页面,找到“Send a message”链接,打开页面(http://127.0.0.1:8161/demo/send.html),填写完表格后,点击“Send”按键,即AMQ投递了一个消息;

2、查看消息:发送之后,我们可以看到数据表中多了一条消息:

Sql代码

mysql>SELECT*FROMactivemq_msgs;

+----+-----------------+--------------------------------------------+-----------+------------+-----+----------+

| ID | CONTAINER       | MSGID_PROD                                 | MSGID_SEQ | EXPIRATION | MSG | PRIORITY |

+----+-----------------+--------------------------------------------+-----------+------------+-----+----------+

|  1 | queue://FOO.BAR | ID:SHI-AP33382A-1486-1309840138441-2:2:1:1 |         1 |          0 | |        5 |

+----+-----------------+--------------------------------------------+-----------+------------+-----+----------+mysql> SELECT * FROM activemq_msgs;

+----+-----------------+--------------------------------------------+-----------+------------+-----+----------+

| ID | CONTAINER | MSGID_PROD | MSGID_SEQ | EXPIRATION | MSG | PRIORITY |

+----+-----------------+--------------------------------------------+-----------+------------+-----+----------+

| 1 | queue://FOO.BAR | ID:SHI-AP33382A-1486-1309840138441-2:2:1:1 | 1 | 0 | | 5 |

+----+-----------------+--------------------------------------------+-----------+------------+-----+----------+

3、取得消息:找到“Receive a message”链接,打开页面(http://127.0.0.1:8161/demo/message/FOO/BAR?readTimeout=10000&type=queue),发现该页面不是一个标准HTML页面,查看其源代码,其内容是不是就是刚才的消息内容?

4、查看消息:消息消费之后,我们可以看到数据表没有消息了:

Sql代码

mysql>SELECT*FROMactivemq_msgs;

Emptysetmysql> SELECT * FROM activemq_msgs;

Empty set

5、我们可以生产多条消息,然后一条一条的消费,发现消息表中的消息一条一条的减少;

6、在发送消息页面,“Destination Type”如果选择“Topic”的话,则消息表中并没有数据,原因在于“Queue”为ptp模式消息,“Topic”为发布/订阅模式消息,当没有订阅者时,消息直接丢掉了。

JMS的内容先介绍到这里,下面我将结合Spring来启动AMQ(即AMQ与应用一同启动,上面介绍的都是单独的启动),通过测试代码来发送和消费消息,敬请期待!

------------------------

欢迎大家批评指正:

http://obullxl.iteye.com

http://www.cnblogs.com/obullxl

http://hi.baidu.com/obullxl

-----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值