activemq spring整合 以及虚拟主题设置
2016-01-08 17:55
543 查看
1. jmstemplate 配置
2.消息监听器配置
3.引入 jar 包
4. 消息发送
5. 消息异步接收
注意:activemq 使用PooledConnectionFactory连接池引入 commons-pool2,如果weblogic版本较低 会与weblogic 的jar 包冲突,此时需要调整weblogic 加载顺序
在 web-inf 目录下面加入 weblogic.xml
activemq虚拟主题 是为了解决同一个主题多个应用订阅,同一个应用集群的多台机器订阅只消费一次 ,主题订阅 注意 命名 是VirtualTopic开头,主题必须持久化,同一个应用clientId 相同
<bean id="jmstemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="mqConnectionFactory" /> <property name="defaultDestination" ref="testqueue"/> <property name="deliveryMode" value="1"></property> <property name="sessionTransacted" value="false"/> <!-- deliveryMode, priority, timeToLive 的开关,要生效,必须配置为true,默认false--> <property name="explicitQosEnabled" value="false" /> <!-- 超时时间 --> <property name="timeToLive" value="${acq.query.timeout}"/> </bean>
class="org.apache.activemq.command.ActiveMQQueue"><constructor-arg value="com.cn.testqueue" /></bean>
<bean id="mqConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> <property name="connectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="${mq.brokerURL}" /> </bean> </property> </bean>
<p><em><span style="color:#2A00FF;">MQ_URL=failover:(tcp://ip:61616,tcp://ip:</span> <span style="color:#2A00FF;">61616)</span></em></p>
2.消息监听器配置
<!-- 消息监听器 --> <bean id="consumerMessageListener" class="com.activemq.lisenter.MessageListenterA"/> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="mqConnectionFactory"> <property name="destination" ref="testqueue"> <property name="messageListener" ref="consumerMessageListener" /> <property name="sessionTransacted" value="true"></property> <property name="concurrentConsumers" value="2"/> </bean>
3.引入 jar 包
<properties> <activemq.version>5.9.1</activemq.version> </properties> <!-- activemq --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-broker</artifactId> <version>${activemq.version}</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-client</artifactId> <version>${activemq.version}</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-console</artifactId> <version>${activemq.version}</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-jaas</artifactId> <version>${activemq.version}</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-openwire-legacy</artifactId> <version>${activemq.version}</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-spring</artifactId> <version>${activemq.version}</version> </dependency>
4. 消息发送
jmsTemplate.convertAndSend(Object message);
5. 消息异步接收
实现监听器MessageListener接口,配置成Spring Bean。只有一个方法需实现: public void onMessage(Message message); 例如: public class <span style="font-family: Arial, Helvetica, sans-serif;">MessageListenterA </span><span style="font-family: Arial, Helvetica, sans-serif;">implements MessageListener {</span> @Override public void onMessage(Message message) { if (!(message instanceof ObjectMessage)) { logger.info("接收的消息类型不匹配!"); return; } try { ObjectMessage objectMessage = (ObjectMessage) message; ShortMessage smsMsg = (ShortMessage)objectMessage.getObject(); //………………… } catch (JMSException e) { logger.error("jms异常", e); } }
注意:activemq 使用PooledConnectionFactory连接池引入 commons-pool2,如果weblogic版本较低 会与weblogic 的jar 包冲突,此时需要调整weblogic 加载顺序
在 web-inf 目录下面加入 weblogic.xml
<?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd"> <container-descriptor> <!--<prefer-web-inf-classes>true</prefer-web-inf-classes>--> <prefer-application-packages> <package-name>org.apache.commons.pool*</package-name> </prefer-application-packages> </container-descriptor> </weblogic-web-app>
activemq虚拟主题 是为了解决同一个主题多个应用订阅,同一个应用集群的多台机器订阅只消费一次 ,主题订阅 注意 命名 是VirtualTopic开头,主题必须持久化,同一个应用clientId 相同
<!--主题订阅--> <bean id="queue_market_topic" class="org.apache.activemq.command.ActiveMQTopic"> <!--对列名称自定义,如果Activemq没有这个对列会新建--> <constructor-arg value="VirtualTopic.TEST" /> </bean>
<bean id="myListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="pubSubDomain" value="true"/> <property name="subscriptionDurable" value="true"/> <property name="receiveTimeout" value="10000"/> <property name="clientId" value="push_client_119" /> <property name="durableSubscriptionName" value="push_client_119"/> <property name="destination" ref="myDestination" /> <property name="messageListener" ref="myTopicListenerA" /> </bean>
相关文章推荐
- Java应用程序可执行jar文件与服务器交互中文乱码
- java发送邮箱
- Java中唯一数的生成
- SpringBoot Demo
- Jdk安装与环境变量配置
- Eclipse设置代码提示
- eclipse快捷键以及使用技巧大全
- hive1.2.1源码导入eclipse阅读以及调试
- Java内存区域及管理
- java生成图片
- springmvc统一异常处理
- Struts2 基于XML配置方式实现对action的所有方法进行校验
- Java DES 加密和解密源码
- 对Ansible二次开发来检查服务器的Java程序占用端口数量
- Java 日志管理最佳实践
- java中Double类数字太大时页面正常显示而不要用科学计数法
- Java - MultipartFile图片上传服务器,并且指定大小压缩
- Hibernate - Spring 整合基础实例 《二》
- Debugging with Eclipse & JPDA
- Spring中原型prototype的准确使用