这篇做一个综合的activeMq
只列出关键代码
框架用的(maven)springMvc+spring+mybaits(这套框架可以直接拿来整合使用)
spring activeMq 配置
<!-- ActiveMQ 连接工厂 -->
<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->
<!-- 如果连接网络:tcp://ip:61616;未连接网络:tcp://localhost:61616 以及用户名,密码-->
<amq:connectionFactory id="amqConnectionFactory"
brokerURL="tcp://127.0.0.1:61616" userName="admin" password="admin" />
<!-- spring caching连接工厂 -->
<!-- spring用于管理真正的Connectionfactory的connectionFactory -->
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<!-- 目标ConnectionFacory对应真实的可以产生JMS Connection的ConnectionFactory -->
<property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
<!-- Session缓存数量 -->
<property name="sessionCacheSize" value="100"></property>
</bean>
<!-- Spring JmsTemplate的消息生产者 start -->
<!-- 定义JmsTemplate的Queue类型 -->
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 这个connectionFactory对应的是我们定义的spring提供的那个ConnectionFactory对象 -->
<constructor-arg ref="connectionFactory"></constructor-arg>
<!-- 非pub/sub模型(发布/订阅),即队列模式 -->
<property name="pubSubDomain" value="false"></property>
</bean>
<!-- 定义JmsTemplate的Topic类型 -->
<bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="connectionFactory"></constructor-arg>
<!-- pub/sub模型(发布/订阅) -->
<property name="pubSubDomain" value="true"></property>
</bean>
<!-- Spring JmsTemplate 的消息生产者end-->
<!-- 消息消费者 start -->
<!-- 定义Queue监听器 -->
<jms:listener-container destination-type="queue" container-type="default" connection-factory="connectionFactory" acknowledge="auto">
<jms:listener destination="test.queue" ref="queueReceiver1"></jms:listener>
<jms:listener destination="test.queue" ref="queueReceiver1"></jms:listener>
</jms:listener-container>
<!-- 定义Topic监听器 -->
<jms:listener-container destination-type="topic" container-type="default" connection-factory="connectionFactory" acknowledge="auto">
<jms:listener destination="test.topic" ref="topicReceiver1"/>
<jms:listener destination="test.topic" ref="topicReceiver2"/>
</jms:listener-container>
<!-- 消息消费者end -->
java activeMq监听器
我是把消息发送的数据直接插入数据库,进行持久化!没涉及到任何业务!
package com.css.cn.consumer;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.css.cn.dao.ActiveInsertDao;
/**
* 点对点消息队列监听器
* @ClassName: QueueReceiver1
* @author zyj
* @date 2016年11月30日 下午3:17:46
*
* @version V1.0
*/
@Component
public class QueueReceiver1 implements MessageListener{
@Autowired
private ActiveInsertDao activeInsert;
@Override
public void onMessage(Message message) {
// TODO Auto-generated method stub
try {
String text = ((TextMessage) message).getText();
System.out.println("点对点QueueReceiver1监听器"+text);
activeInsert.insertValue(text);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java activeMq消息发送
package com.css.cn.sender;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;
/**
* 消息生产者
* @ClassName: QueueSender1
* @author zyj
* @date 2016年11月30日 上午11:41:41
*
* @version V1.0
*/
@Component
public class QueueSender1 {
// 通过Qualifier来注入对应的Bean
@Autowired
@Qualifier("jmsQueueTemplate")
private JmsTemplate jmsTemplate;
/**
* 发送消息到指定的队列(目标)
* @Title: send
* @param queueName 队列名称
* @param message 消息内容
* @return void
* @author zyj
* @date 2016年11月30日 上午11:57:43
* @throws
*/
public void send(String queueName,String message){
jmsTemplate.send(queueName, new MessageComm(message));
}
}
java 消息公共类
package com.css.cn.sender;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.springframework.jms.core.MessageCreator;
public class MessageComm implements MessageCreator {
private String message;
public MessageComm(String message){
this.message = message;
}
@Override
public Message createMessage(Session session) throws JMSException {
// TODO Auto-generated method stub
TextMessage messages = session.createTextMessage(message);
return messages;
}
}
参考文章: http://blog.youkuaiyun.com/jiuqiyuliang/article/details/48758203
activeMq 消息持久化
需要mysql驱动jar包 activeio-core-3.1.4.jar activemq-all-5.14.1.jar commons-pool-1.5.6.jar commons-dbcp-1.4.jar
conf/activemq.xml修改以下内容
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
改为
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" useDatabaseLock="false"/>
</persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" useDatabaseLock="false"/>
</persistenceAdapter>
然后添加
<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://192.168.137.6:3306/game?relaxAutoCommit=true"/>
<property name="username" value="deminplat"/>
<property name="password" value="deminplat"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.137.6:3306/game?relaxAutoCommit=true"/>
<property name="username" value="deminplat"/>
<property name="password" value="deminplat"/>
<property name="poolPreparedStatements" value="true"/>
</bean>