加载核心XML文件,配置MQ的监听和发送:
<?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">
<!-- 配置connectionFactory -->
<bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://192.168.45.112:61616</value>
</property>
</bean>
<!-- 发送时获取的Template,引入 connectionFactory 发送给上面配置的url-->
<bean id="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="connectionFactory" />
</property>
</bean>
<!-- 发送消息 ,发送消息到 com.baidu.web.server.topic通道-->
<bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg index="0" value="com.baidu.web.server.topic" />
</bean>
<!-- MQ接收消息,接收 com.baidu.server.web.topic 通道的消息 -->
<bean id="webTopicDestination"
class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg index="0"
value="com.baidu.server.web.topic">
</constructor-arg>
</bean>
<!-- 接收消息监听的类 onMessage监听消息接收类 -->
<bean id="messageReceiver" class="com.baidu.service.TsmOnMessage"></bean>
<!-- 消息监听 -->
<bean
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="concurrentConsumers" value="1" />
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="webTopicDestination" />
<property name="messageListener" ref="messageReceiver" />
<property name="pubSubNoLocal" value="false"></property>
</bean>
</beans>
MQ的监听类: 在onMessage方法中,获取到message,可以去处理。
public class TsmOnMessage implements MessageListener {
private Logger logger = Logger.getLogger(TsmOnMessage.class);
public void onMessage(Message message) {
try {
ObjectMessage objectMessage = (ObjectMessage) message;
} catch (JMSException e) {
logger.error("获取消息队列内容失败:" + e);
}
}
}
发送消息到MQ上:
public class TsmSendMessage implements ApplicationContextAware{
private static Logger logger=Logger.getLogger(TsmSendMessage.class);
private static ApplicationContext context;
public static void putMessage(final ITsmSignal obj) {
synchronized(obj){
try {
JmsTemplate template = (JmsTemplate) context.getBean("jmsTemplate");
Destination destination = (Destination) context.getBean("destination");
template.send(destination, new MessageCreator(){
public Message createMessage(Session session) throws JMSException {
Message message=session.createObjectMessage(obj);
return message;
}
});
logger.info("发送节点信息到消息队列上成功");
} catch (Exception e) {
logger.error("发送节点信息到消息队列上失败:"+e,e);
}
}
}
//系统加载时,获取到ApplicationContext
@SuppressWarnings("static-access")
public void setApplicationContext(ApplicationContext context)
throws BeansException {
this.context=context;
}
public static ApplicationContext getContext(){
return context;
}
}
当然,在发送消息的时候,需要吧applicationContext加载进去,在spring中加载下就好:
<bean class="com.baidu.service.TsmSendMessage"></bean>