首先解决mysql持久化问题
在<broker></broker>里面写上这一段并且注释activemq默认的
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#MySQL-DS"/>
</persistenceAdapter>
<!--<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter> -->
接下来就是在<broker></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://127.0.0.1:3306/callring?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
需要添加相应jar包三个mysql启动包 commons-dbcp包 commons-pool包
至此完成实现持久化。
持久化解释
如果不写持久化,那么当关闭activemq服务器时候,下次启动时候,
将不能接收上次发送到队列的信息。也就是tm=null。如果使用持久化之后,
下次启动依然可以接收到消息。持久化就是每个发送者有一个唯一标识
,接收者通过这个唯一标识去识别信息这是PTP模式。
public void receive(Destination destination) {
TextMessage tm = (TextMessage) jmsTemplate.receive(destination);
if (tm==null) {
System.out.println("从"+destination+"获取信息为空");
}
else {
try {
System.out.println("从" + destination.toString() + "收到了消息:\t" + tm.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}