activemq spring整合 以及虚拟主题设置

本文详细介绍了ActiveMQ消息中间件的配置方法,包括JMSTemplate、消息监听器、jar包引入、消息发送和异步接收等核心部分。特别强调了如何在weblogic环境中解决与commons-pool2的冲突问题,并解释了虚拟主题的概念及其在消息订阅中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. jmstemplate 配置
	<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> 



 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值