ActiveMQ和spring集成

1.消息发送类

Java代码 复制代码 收藏代码
  1. package cn.com.biceng.jms.queue;
  2. import javax.jms.Destination;
  3. import javax.jms.JMSException;
  4. import javax.jms.Message;
  5. import javax.jms.Session;
  6. import org.apache.activemq.command.ActiveMQQueue;
  7. import org.springframework.jms.core.JmsTemplate;
  8. import org.springframework.jms.core.MessageCreator;
  9. import cn.com.biceng.jms.IQueueSender;
  10. /**
  11. * 队列消息发送者。
  12. */
  13. public class QueueSender implements IQueueSender
  14. {
  15. // 发送消息的目的地
  16. private Destination destination;
  17. private JmsTemplate jmsTemplate;
  18. public QueueSender(ActiveMQQueue queue){
  19. this.destination = queue;
  20. }
  21. /**
  22. * 发送消息。
  23. *
  24. * @param message
  25. * 报文。
  26. * @return
  27. * @author ma_chunlin
  28. * @date 2013-5-6
  29. */
  30. public void send(final String message) throws JMSException
  31. {
  32. jmsTemplate.send(destination, new MessageCreator()
  33. {
  34. public Message createMessage(Session session) throws JMSException
  35. {
  36. return session.createTextMessage(message);
  37. }
  38. });
  39. }
  40. public void setJmsTemplate(JmsTemplate jmsTemplate)
  41. {
  42. this.jmsTemplate = jmsTemplate;
  43. }
  44. }
package cn.com.biceng.jms.queue;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

import cn.com.biceng.jms.IQueueSender;

/**
 * 队列消息发送者。
  */
public class QueueSender implements IQueueSender
{
	
	// 发送消息的目的地
	private Destination destination;
	
	private JmsTemplate jmsTemplate;
	
	public QueueSender(ActiveMQQueue queue){
		this.destination = queue;
	}
	
	/**
	 * 发送消息。
	 * 
	 * @param message
	 *            报文。
	 * @return
	 * @author ma_chunlin
	 * @date 2013-5-6
	 */
	public void send(final String message) throws JMSException
	{

		jmsTemplate.send(destination, new MessageCreator()
		{
			
			public Message createMessage(Session session) throws JMSException
			{

				return session.createTextMessage(message);
			}
		});
	}
	
	public void setJmsTemplate(JmsTemplate jmsTemplate)
	{

		this.jmsTemplate = jmsTemplate;
	}
	
}

2.消息接收类,此处采用监听器方式实现

Java代码 复制代码 收藏代码
  1. package cn.com.biceng.jms.queue;
  2. import javax.jms.JMSException;
  3. import javax.jms.Message;
  4. import javax.jms.Session;
  5. import javax.jms.TextMessage;
  6. import org.apache.log4j.Logger;
  7. import org.springframework.jms.listener.SessionAwareMessageListener;
  8. /**
  9. *
  10. * 消息接收监听器。
  11. */
  12. public class QueueReceiverListener implements SessionAwareMessageListener
  13. {
  14. private static Logger log = Logger.getLogger(QueueReceiverListener.class);
  15. public void onMessage(Message message, Session session) throws JMSException
  16. {
  17. //1.接收报文
  18. TextMessage msg = (TextMessage)message;
  19. if(log.isDebugEnabled()){
  20. log.debug("QueueReceiverListener接收到报文:" + msg.getText());
  21. }
  22. //2.解析报文,建议此处使用工具类解析
  23. //3.调用接口,处理业务,建议此处使用“抽象工厂模式”调用内部接口,以使代码符合“开-闭原则”
  24. //4.发送返回消息(可省略)
  25. }
  26. }
package cn.com.biceng.jms.queue;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.log4j.Logger;
import org.springframework.jms.listener.SessionAwareMessageListener;

/**
 * 
 * 消息接收监听器。 
  */
public class QueueReceiverListener implements SessionAwareMessageListener
{
	private static Logger log = Logger.getLogger(QueueReceiverListener.class);
	
	public void onMessage(Message message, Session session) throws JMSException
	{
		//1.接收报文
		TextMessage msg = (TextMessage)message;
		
		if(log.isDebugEnabled()){
			log.debug("QueueReceiverListener接收到报文:" +  msg.getText());
		}
		
		//2.解析报文,建议此处使用工具类解析
		
		//3.调用接口,处理业务,建议此处使用“抽象工厂模式”调用内部接口,以使代码符合“开-闭原则”
		
		//4.发送返回消息(可省略)
	}
}

3.消息发送接口

Java代码 复制代码 收藏代码
  1. package cn.com.biceng.jms;
  2. import javax.jms.JMSException;
  3. /**
  4. * 队列消息发送者。
  5. *
  6. */
  7. public interface IQueueSender
  8. {
  9. /**
  10. * 发送消息。
  11. *
  12. * @param message
  13. * 报文。
  14. * @return
  15. * @author ma_chunlin
  16. * @date 2013-5-6
  17. */
  18. public abstract void send(final String message) throws JMSException;
  19. }
package cn.com.biceng.jms;

import javax.jms.JMSException;
/**
 * 队列消息发送者。
 * 
  */
public interface IQueueSender
{
	
	/**
	 * 发送消息。
	 * 
	 * @param message
	 *            报文。
	 * @return
	 * @author ma_chunlin
	 * @date 2013-5-6
	 */
	public abstract void send(final String message) throws JMSException;
	
}

4. 用到的jar



5. spring配置文件

Java代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  6. http://www.springframework.org/schema/context
  7. http://www.springframework.org/schema/context/spring-context-2.5.xsd"
  8. default-autowire="byName">
  9. <!-- JMS activeMq的配置 -->
  10. <!-- 1. 配置connectionFactory -->
  11. <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
  12. destroy-method="stop">
  13. <property name="connectionFactory">
  14. <bean class="org.apache.activemq.ActiveMQConnectionFactory">
  15. <property name="brokerURL">
  16. <!-- JMS消息服务器的IP和端口号 -->
  17. <value>tcp://192.168.8.241:61616</value>
  18. </property>
  19. </bean>
  20. </property>
  21. <property name="maxConnections" value="100"/>
  22. <!-- <property name="idleTimeout" value="60"/> -->
  23. </bean>
  24. <!-- 2.Spring JMS Template -->
  25. <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
  26. <property name="connectionFactory">
  27. <ref local="jmsFactory" />
  28. </property>
  29. <property name="defaultDestinationName" value="queue_eSign_call_feeSys" />
  30. <!-- 区别它采用的模式为false是p2p, true是订阅 -->
  31. <property name="pubSubDomain" value="false" />
  32. </bean>
  33. <!-- 3.发送给计费系统的消息 -->
  34. <bean id="queue_eSign_to_feeSys" class="org.apache.activemq.command.ActiveMQQueue">
  35. <constructor-arg index="0" value="queue_eSign_to_feeSys" />
  36. </bean>
  37. <!-- 4.来自计费系统的消息 -->
  38. <bean id="queue_feeSys_to_eSign" class="org.apache.activemq.command.ActiveMQQueue">
  39. <constructor-arg index="0" value="queue_feeSys_to_eSign" />
  40. </bean>
  41. <!-- 5.消息发送者 -->
  42. <bean id="QueueSender" class="cn.com.biceng.jms.queue.QueueSender">
  43. <constructor-arg ref="queue_eSign_to_feeSys" />
  44. <property name="jmsTemplate" ref="jmsTemplate" />
  45. </bean>
  46. <!-- 6.队列监听器 -->
  47. <bean id="QueueReceiverListener" class="cn.com.biceng.jms.queue.QueueReceiverListener">
  48. </bean>
  49. <!-- 7.队列监听器的容器 -->
  50. <bean id="QueueReceiverContainer"
  51. class="org.springframework.jms.listener.DefaultMessageListenerContainer">
  52. <property name="concurrentConsumers" value="1" />
  53. <property name="connectionFactory" ref="jmsFactory" />
  54. <!-- 监听的队列 -->
  55. <property name="destinationName" value="queue_feeSys_to_eSign" />
  56. <property name="messageListener" ref="QueueReceiverListener" />
  57. <property name="pubSubNoLocal" value="false"/>
  58. </bean>
  59. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans    
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    
 http://www.springframework.org/schema/context    
 http://www.springframework.org/schema/context/spring-context-2.5.xsd"
	default-autowire="byName">   
 
 <!-- JMS activeMq的配置  -->
  
    <!-- 1. 配置connectionFactory -->
	<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
		destroy-method="stop">
		<property name="connectionFactory">
			<bean class="org.apache.activemq.ActiveMQConnectionFactory">
				<property name="brokerURL"> 
               		<!-- JMS消息服务器的IP和端口号 -->
					<value>tcp://192.168.8.241:61616</value>
				</property>
			</bean>
		</property>
		<property name="maxConnections" value="100"/>
		<!-- <property name="idleTimeout" value="60"/>  -->
	</bean>   
  
    <!-- 2.Spring JMS Template -->
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory">
			<ref local="jmsFactory" />
		</property>
		<property name="defaultDestinationName" value="queue_eSign_call_feeSys" />   
        <!-- 区别它采用的模式为false是p2p, true是订阅 -->
		<property name="pubSubDomain" value="false" />
	</bean>   

    <!-- 3.发送给计费系统的消息 -->
	<bean id="queue_eSign_to_feeSys" class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg index="0" value="queue_eSign_to_feeSys" />
	</bean>
    
    <!-- 4.来自计费系统的消息  -->
	<bean id="queue_feeSys_to_eSign" class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg index="0" value="queue_feeSys_to_eSign" />
	</bean>
	
	<!-- 5.消息发送者 -->
	<bean id="QueueSender" class="cn.com.biceng.jms.queue.QueueSender">
		<constructor-arg ref="queue_eSign_to_feeSys" />
		<property name="jmsTemplate" ref="jmsTemplate" />
	</bean>
	
	<!-- 6.队列监听器 -->
	<bean id="QueueReceiverListener" class="cn.com.biceng.jms.queue.QueueReceiverListener">
	</bean>
	
	<!-- 7.队列监听器的容器 -->
	<bean id="QueueReceiverContainer"
		class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<property name="concurrentConsumers" value="1" />
		<property name="connectionFactory" ref="jmsFactory" />
		<!-- 监听的队列 -->
		<property name="destinationName" value="queue_feeSys_to_eSign" />
		<property name="messageListener" ref="QueueReceiverListener" />
		<property name="pubSubNoLocal" value="false"/>   
	</bean>
</beans>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值