forked from obullxl/obullxl.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtopic-blog-12.html
176 lines (147 loc) · 32.3 KB
/
topic-blog-12.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>最新 Java/Node.js/Spring/MySQL/数据库 技术博客 - 做最好的Java,Node.js,Bootstrap,DWZ,Git,GitHub,阿里云 技术交流开发博客</title>
<meta name="description" content="Java编程,Node.js Bootstrap Node Spring SpringMVC Struts1 Struts2 Webwork框架深入,Freemarker Velocity模板使用,XMLHTTP Ajax开发,Java Web开发,Java企业应用,Java设计模式,Java开源框架,Java应用服务器,Rich Client讨论,Ruby编程,Ruby DSL开发,Ruby on rails实践,JavaScript编程,敏捷软件开发XP TDD,软件配置管理,软件测试,项目管理UML,数据库,C#/.net C/C++ Erlang/FP PHP/Linux平台,精通Hibernate" />
<meta name="keywords" content="Java编程 Node.js框架 Spring框架 Ajax技术 agile敏捷软件开发 ruby on rails实践 ITeye深度技术社区" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="shortcut icon" href="http://anode.aliapp.com/favicon.png" />
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Lato:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic" />
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Arizonia" />
<link rel="stylesheet" type="text/css" href="http://obullxl.github.io/public/css/bootstrap.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://obullxl.github.io/public/css/bootstrap-responsive.css" />
<link rel="stylesheet" type="text/css" href="http://obullxl.github.io/public/css/atom-front.css" />
<script type="text/javascript" charset="utf-8" src="http://obullxl.github.io/public/js/jquery-2.0.3.js"></script>
<script type="text/javascript" charset="utf-8" src="http://obullxl.github.io/public/js/bootstrap.js"></script>
<!--[if lt IE 9]>
<script type="text/javascript" charset="utf-8" src="http://obullxl.github.io/public/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">Menu</a>
<div class="nav-collapse">
<ul class="nav">
<li><a href="./index.html">首页</a></li>
<li class="active"><a href="./index-blog.html">博客</a></li>
<li><a href="./index-news.html">资讯</a></li>
<li><a href="./index-album.html">图片</a></li>
</ul>
<ul class="nav pull-right">
<li><a href="./index-about.html">关于</a></li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
</div>
</div>
<!-- /.navbar -->
<style type="text/css">
.radius-block:after {
content: "发表评论";
}
</style>
<div class="blog">
<div class="container">
<div class="row">
<div class="span8">
<div class="entry-ads">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-2548953017344039";
/* GitIO列表1-728W */
google_ad_slot = "5847202679";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div>
<div class="entry">
<h2>JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 - 老牛啊</h2>
<p class="meta">
<i class="icon-calendar"></i> 2013-09-05
- <i class="icon-user"></i> 老牛啊
</p>
<p>一、JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://jcp.org/en/jsr/detail?id=914),它定义了消息的格式和消息传递模式;消息包括:消息头,消息扩展属性和消息体,其结构看起来与SOAP非常的相似,但一般情况下,SOAP主要关注远程服务调用</p>
<p>
<strong>一、JMS的理解</strong><br />JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://jcp.org/en/jsr/detail?id=914),它定义了消息的格式和消息传递模式;<br />消息包括:消息头,消息扩展属性和消息体,其结构看起来与SOAP非常的相似,但一般情况下,SOAP主要关注远程服务调用,而消息则专注于信息的交换;<br />消息分为:消息生产者,消息服务器和消息消费者。生产者与消费者之间是透明的,生产者在产生消息之后,把消息发送到消息服务器,再由消息服务器发给消费者,因此它们构成了JMS的3点结构;<br />消息服务器再给消费者时,有2种模式:点到点(ptp: point to point)模式和发布/订阅(publish/subscribe)模式;<br />ptp:即生产者把消息投递到消息服务器后,这条消息只能由某一个消费者使用;<br />发布/订阅:顾名思义,就是共享消息了,只要愿意,消费者都可以监听消息;<br /><br /><strong>二、消息服务器(ActiveMQ)</strong><br />消息服务器在JMS的3点结构中起着重要作用,没有它,生产者的消息不知道如何投递出去,消费者不知道从哪里取得消息,它同样是隔离生产者和消费者的关键部分…………<br />JMS消息服务器有很多:ActiveMQ、Jboss MQ、Open MQ、RabbitMQ、ZeroMQ等等。<br />本文介绍的是开源的Java实现的Apache ActiveMQ(http://activemq.apache.org),它的特性在首页就能看到,我就不再介绍了;<br /><br />1、下载AMQ:http://activemq.apache.org/download.html,最新版本是5.5.0;<br />2、解压apache-activemq-5.5.0-bin.zip文件到文件系统(比如D:\ActiveMQ-5.5.0);<br />3、执行bin/activemq.bat脚本即可启动AMQ:<br /><div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"> INFO | ActiveMQ 5.5.0 JMS Message Broker (localhost) is starting<br/> ......<br/> INFO | Listening for connections at: tcp://SHI-AP33382A:61616<br/></div>当看到上面的日志输出时,表示AMQ已经启动了;<br />4、默认情况下,AMQ使用conf/activemq.xml作为配置文件,我们可修改它,然后以 bin/activemq.bat xbean:./conf/my.xml启动AMQ;<br /><br /><strong>三、持久化消息(MySQL)</strong><br />因为接下来我们修改AMQ的默认配置文件,所以先备份conf/activemq.xml文件;<br />1、建立MySQL数据库:要使用MySQL存储消息,必须告诉AMQ数据源:<br /><div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;">/**<br/> * 创建数据库<br/> */<br/>CREATE DATABASE misc DEFAULT CHARSET=UTF8;<br/><br/>/**<br/> * 创建用户和授权<br/> */<br/>GRANT ALL PRIVILEGES ON misc.* TO 'misc_root'@'%' IDENTIFIED BY 'misc_root_pwd';<br/>GRANT ALL PRIVILEGES ON misc.* TO 'misc_root'@'localhost' IDENTIFIED BY 'misc_root_pwd';<br/></div>通过上面的SQL脚本,我们建立了名为misc的数据库,并且把所有权限都赋予了misc_root的用户;<br />由于AMQ需要在本数据库中建立数据表,因此用户的权限必须具有建表权限;<br />2、添加MySQL数据源:默认情况下,AMQ使用KahaDB存储(我对KahaDB不了解),注释到KahaDB的配置方式,改为MySQL的:<br /><div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"><div><span style="color: #008000;"><!--</span><span style="color: #008000;"><br /><persistenceAdapter><br /> <kahaDB directory="${activemq.base}/data/kahadb"/><br /></persistenceAdapter><br /></span><span style="color: #008000;">--></span><span style="color: #000000;"><br /></span><span style="color: #0000ff;"><</span><span style="color: #800000;">persistenceAdapter</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">jdbcPersistenceAdapter </span><span style="color: #ff0000;">dataSource</span><span style="color: #0000ff;">="#MySQL-DS"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /></span><span style="color: #0000ff;"></</span><span style="color: #800000;">persistenceAdapter</span><span style="color: #0000ff;">></span></div></div>该配置表示,我们将要使用一个叫做“MySQL-DS”的JDBC数据源;<br />3、配置MySQL数据源:在</broker>节点后面,增加MySQL数据源配置:<br /><div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"><div><span style="color: #008000;"><!--</span><span style="color: #008000;"> MySQL DataSource </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /></span><span style="color: #0000ff;"><</span><span style="color: #800000;">bean </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="MySQL-DS"</span><span style="color: #ff0000;"> class</span><span style="color: #0000ff;">="org.apache.commons.dbcp.BasicDataSource"</span><span style="color: #ff0000;"> destroy-method</span><span style="color: #0000ff;">="close"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="driverClassName"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="com.mysql.jdbc.Driver"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="url"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="jdbc:mysql://127.0.0.1:3306/misc?useUnicode=true&amp;characterEncoding=UTF-8"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="username"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="misc_root"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="password"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="misc_root_pwd"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="poolPreparedStatements"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /></span><span style="color: #0000ff;"></</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">></span></div></div>其实这就是一个Spring的Bean的配置,注意id与上面的保持一致;<br /><br />整个AMQ的配置文件内容为:<br /><div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"><div><span style="color: #0000ff;"><?</span><span style="color: #ff00ff;">xml version="1.0" encoding="UTF-8"</span><span style="color: #0000ff;">?></span><span style="color: #000000;"><br /></span><span style="color: #0000ff;"><</span><span style="color: #800000;">beans </span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000;"> xmlns:amq</span><span style="color: #0000ff;">="http://activemq.apache.org/schema/core"</span><span style="color: #ff0000;"> xmlns:xsi</span><span style="color: #0000ff;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000;"><br /> xsi:schemaLocation</span><span style="color: #0000ff;">="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd<br /> http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> Allows us to use system properties as variables in this configuration file </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">bean </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="locations"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">value</span><span style="color: #0000ff;">></span><span style="color: #000000;">classpath:/META-INF/credentials.properties</span><span style="color: #0000ff;"></</span><span style="color: #800000;">value</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;"><br /> The <broker> element is used to configure the ActiveMQ broker.<br /> </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">broker </span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://activemq.apache.org/schema/core"</span><span style="color: #ff0000;"> brokerName</span><span style="color: #0000ff;">="localhost"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;"><br /> For better performances use VM cursor and small memory limit. For more information, see: http://activemq.apache.org/message-cursors.html Also, if your producer is "hanging", it's probably due to producer flow control. For more information, see:<br /> http://activemq.apache.org/producer-flow-control.html<br /> </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">destinationPolicy</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">policyMap</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">policyEntries</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">policyEntry </span><span style="color: #ff0000;">topic</span><span style="color: #0000ff;">=">"</span><span style="color: #ff0000;"> producerFlowControl</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;"> memoryLimit</span><span style="color: #0000ff;">="1mb"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">pendingSubscriberPolicy</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">vmCursor </span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">pendingSubscriberPolicy</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">policyEntry</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">policyEntry </span><span style="color: #ff0000;">queue</span><span style="color: #0000ff;">=">"</span><span style="color: #ff0000;"> producerFlowControl</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;"> memoryLimit</span><span style="color: #0000ff;">="1mb"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;"><br /> Use VM cursor for better latency For more information, see: http://activemq.apache.org/message-cursors.html <pendingQueuePolicy> <vmQueueCursor/> </pendingQueuePolicy><br /> </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">policyEntry</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">policyEntries</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">policyMap</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">destinationPolicy</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;"><br /> The managementContext is used to configure how ActiveMQ is exposed in<br /> JMX. By default, ActiveMQ uses the MBean server that is started by<br /> the JVM. For more information, see:<br /> <br /> http://activemq.apache.org/jmx.html<br /> </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">managementContext</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">managementContext </span><span style="color: #ff0000;">createConnector</span><span style="color: #0000ff;">="false"</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">managementContext</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;"><br /> Configure message persistence for the broker. The default persistence<br /> mechanism is the KahaDB store (identified by the kahaDB tag).<br /> For more information, see:<br /> <br /> http://activemq.apache.org/persistence.html<br /> </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;"><br /> <persistenceAdapter><br /> <kahaDB directory="${activemq.base}/data/kahadb"/><br /> </persistenceAdapter><br /> </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">persistenceAdapter</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">jdbcPersistenceAdapter </span><span style="color: #ff0000;">dataSource</span><span style="color: #0000ff;">="#MySQL-DS"</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">persistenceAdapter</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;"><br /> The transport connectors expose ActiveMQ over a given protocol to<br /> clients and other brokers. For more information, see:<br /> <br /> http://activemq.apache.org/configuring-transports.html<br /> </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">transportConnectors</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">transportConnector </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="openwire"</span><span style="color: #ff0000;"> uri</span><span style="color: #0000ff;">="tcp://0.0.0.0:61616"</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">transportConnectors</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">broker</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> MySQL DataSource </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">bean </span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="MySQL-DS"</span><span style="color: #ff0000;"> class</span><span style="color: #0000ff;">="org.apache.commons.dbcp.BasicDataSource"</span><span style="color: #ff0000;"> destroy-method</span><span style="color: #0000ff;">="close"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="driverClassName"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="com.mysql.jdbc.Driver"</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="url"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="jdbc:mysql://127.0.0.1:3306/misc?useUnicode=true&amp;characterEncoding=UTF-8"</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="username"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="misc_root"</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="password"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="misc_root_pwd"</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="poolPreparedStatements"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;"> </span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;"><br /> Enable web consoles, REST and Ajax APIs and demos<br /> It also includes Camel (with its web console), see ${ACTIVEMQ_HOME}/conf/camel.xml for more info<br /> <br /> Take a look at ${ACTIVEMQ_HOME}/conf/jetty.xml for more details<br /> </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">import </span><span style="color: #ff0000;">resource</span><span style="color: #0000ff;">="jetty.xml"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /><br /></span><span style="color: #0000ff;"></</span><span style="color: #800000;">beans</span><span style="color: #0000ff;">></span></div></div><br /><strong>四、查看MySQL数据表</strong><br />重新启动AMQ,启动完成之后,我们发现,misc数据库多了3张数据表:<br /><div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;">mysql> SHOW tables;<br/>+----------------+<br/>| Tables_in_misc |<br/>+----------------+<br/>| activemq_acks |<br/>| activemq_lock |<br/>| activemq_msgs |<br/>+----------------+<br/></div>数据表activemq_msgs即为持久化消息表;<br /><br /><strong>五、持久化消息</strong><br />系统启动完毕之后,消息表中内容为空:<br /><div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;">mysql> SELECT * FROM activemq_msgs;<br/>Empty set<br/></div>1、发送消息:打开http://127.0.0.1:8161/demo/页面,找到“Send a message”链接,打开页面(http://127.0.0.1:8161/demo/send.html),填写完表格后,点击“Send”按键,即AMQ投递了一个消息;<br />2、查看消息:发送之后,我们可以看到数据表中多了一条消息:<br /><div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;">mysql> SELECT * FROM activemq_msgs;<br/>+----+-----------------+--------------------------------------------+-----------+------------+-----+----------+<br/>| ID | CONTAINER | MSGID_PROD | MSGID_SEQ | EXPIRATION | MSG | PRIORITY |<br/>+----+-----------------+--------------------------------------------+-----------+------------+-----+----------+<br/>| 1 | queue://FOO.BAR | ID:SHI-AP33382A-1486-1309840138441-2:2:1:1 | 1 | 0 | | 5 |<br/>+----+-----------------+--------------------------------------------+-----------+------------+-----+----------+<br/></div>3、取得消息:找到“Receive a message”链接,打开页面(http://127.0.0.1:8161/demo/message/FOO/BAR?readTimeout=10000&type=queue),发现该页面不是一个标准HTML页面,查看其源代码,其内容是不是就是刚才的消息内容?<br />4、查看消息:消息消费之后,我们可以看到数据表没有消息了:<br /><div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;">mysql> SELECT * FROM activemq_msgs;<br/>Empty set<br/></div>5、我们可以生产多条消息,然后一条一条的消费,发现消息表中的消息一条一条的减少;<br />6、在发送消息页面,“Destination Type”如果选择“Topic”的话,则消息表中并没有数据,原因在于“Queue”为ptp模式消息,“Topic”为发布/订阅模式消息,当没有订阅者时,消息直接丢掉了。<br /><br />JMS的内容先介绍到这里,下面我将结合Spring来启动AMQ(即AMQ与应用一同启动,上面介绍的都是单独的启动),通过测试代码来发送和消费消息,敬请期待!<br /><br />------------------------<br />欢迎大家批评指正:<br />http://obullxl.iteye.com<br />http://www.cnblogs.com/obullxl<br />http://hi.baidu.com/obullxl<br />-----------------------<br /><img src="http://counter.cnblogs.com/blog/rss/2098208" width="1" height="1" alt=""/><br/><p>本文链接:<a href="http://www.cnblogs.com/obullxl/archive/2011/07/05/jms-activemq-persist-mysql.html" target="_blank">http://www.cnblogs.com/obullxl/archive/2011/07/05/jms-activemq-persist-mysql.html</a>,转载请注明。</p>
</p>
</div>
<div class="entry-ads">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-2548953017344039";
/* GitIO列表2-728W */
google_ad_slot = "7323935870";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div>
</div>
<div class="span4">
<div class="sidebar">
<div class="widget">
<h3>推荐排行榜Top5</h3>
<ul>
<li><a href="./topic-blog-13.html" rel="bookmark">使用MySQL的LAST_INSERT_ID来确定各分表的唯一ID值 - 老牛啊</a></li>
<li><a href="./topic-blog-17.html" rel="bookmark">Apache与Tomcat集群配置 - 老牛啊</a></li>
<li><a href="./topic-blog-12.html" rel="bookmark">JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 - 老牛啊</a></li>
<li><a href="./topic-blog-11.html" rel="bookmark">Spring集成Quartz定时任务框架介绍和Cron表达式详解 - 老牛啊</a></li>
<li><a href="./topic-blog-10.html" rel="bookmark">JeeCMS 2012 Maven构建+Eclipse完整开发版 - 老牛啊</a></li>
</ul>
</div>
<div class="widget-ads">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-2548953017344039";
/* GitIO侧边栏-大幅 */
google_ad_slot = "4370469471";
google_ad_width = 300;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div>
<div class="widget">
<h3>评论排行榜Top5</h3>
<ul>
<li><a href="./topic-blog-18.html" rel="bookmark">Android源码下载并在Eclipse中方便查看 - 老牛啊</a></li>
<li><a href="./topic-blog-17.html" rel="bookmark">Apache与Tomcat集群配置 - 老牛啊</a></li>
<li><a href="./topic-blog-16.html" rel="bookmark">Android从SDCard中取得图片并设置为桌面背景 - 老牛啊</a></li>
<li><a href="./topic-blog-15.html" rel="bookmark">Android动画之Frame动画实战 - 老牛啊</a></li>
<li><a href="./topic-blog-14.html" rel="bookmark">Android动画之Tween动画实战 - 老牛啊</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function() {
$("#ufrom").val(window.location.href);
});
</script>
<div class="footer">
<div class="container">
<div class="row">
<div id="footer-copyright" class="span6">
© 2013 <a href="http://obullxl.github.io">[email protected]</a>
</div>
<div id="footer-terms" class="span6">
<a href="http://anode.aliapp.com">云博客</a>
<a href="http://obullxl.cnblogs.com">博客园</a>
<script type="text/javascript" src="http://js.tongji.linezing.com/3298180/tongji.js"></script><noscript><a href="http://www.linezing.com"><img src="http://img.tongji.linezing.com/3298180/tongji.gif"/></a></noscript>
</div>
</div>
</div>
</div>
<!-- /footer -->
</body>
</html>