标签:



package com.nari.spring.jms2;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;public class JmsMessageListener implements MessageListener {public void onMessage(Message message) {System.out.println("消息全部内容:" + message.toString());try {System.out.println("消息主题:" + message.getJMSDestination().toString());} catch (JMSException e1) {e1.printStackTrace();}TextMessage tm = (TextMessage) message;try {System.out.println("消息体:" + tm.getText());} catch (JMSException e) {e.printStackTrace();}}}
package com.nari.spring.jms2;import java.util.Scanner;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.command.ActiveMQTopic;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;public class Publisher {//下面两个field,在applicationContext-*.xml配置private JmsTemplate template;private Destination destination;public void sendMessage() {long keyValue = 302001011;boolean sendMsgFlag = true;int addIndex = 0;System.out.println("输入主题内容,输入N停止发送消息:");while (sendMsgFlag) {// 从终端输入信息Scanner cin = new Scanner(System.in);String text = cin.nextLine();if (text.equals("N")) {sendMsgFlag = false;}// 目的地地址为:topic://on3000.topic.*int startIndex = destination.toString().indexOf("//");int endIndex = destination.toString().indexOf("*");// 拼接新的主题:类似 on3000.topic.30200101112String subTopicDestination = destination.toString().substring(startIndex + 2, endIndex)+ Long.toString(keyValue + addIndex);//发送消息jmsTemplateSend(subTopicDestination, text);addIndex++;}}/*** 向指定主题发送指定消息** @param destinationString* :主题* @param strMessage* :消息内容*/protected void jmsTemplateSend(String destinationString,final String strMessage) {ActiveMQTopic topicDestination = new ActiveMQTopic(destinationString);template.send(topicDestination, new MessageCreator() {public Message createMessage(Session session) throws JMSException {TextMessage message = session.createTextMessage();message.setText(strMessage);return message;}});}public JmsTemplate getJmsTemplate() {return template;}public void setJmsTemplate(JmsTemplate template) {this.template = template;}public Destination getDestination() {return destination;}public void setDestination(Destination destination) {this.destination = destination;}}
package com.nari.spring.jms2;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-2.xml");// applicationContext-*.xml初始化时,貌似会自动开启subscribe,下面两行注不注释掉都可以// DefaultMessageListenerContainer subscribe = (DefaultMessageListenerContainer)context.getBean("consumer");// subscribe.start();Publisher publisher = (Publisher) context.getBean("publisher");publisher.sendMessage();}}
<?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:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!--创建连接工厂 --><bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"><property name="brokerURL" value="tcp://localhost:61616" /></bean><!-- 声明目标,ActiveMQQueue或ActiveMQTopic --><bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic"autowire="constructor"><!-- 通配符,匹配多个主题 --><constructor-arg value="on3000.topic.*" /></bean><!-- 创建JMS发送信息的模板的对象 --><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory" /><property name="defaultDestination" ref="topicDestination" /><property name="receiveTimeout" value="6000" /></bean><!-- 生成者 --><bean id="publisher" class="com.nari.spring.jms2.Publisher"><property name="jmsTemplate" ref="jmsTemplate" /><property name="destination" ref="topicDestination" /></bean><!-- 消息监听接口 --><bean id="jmsMessageListener" class="com.nari.spring.jms2.JmsMessageListener"></bean><!-- 消费者,通过消息侦听器实现 --><bean id="consumer"class="org.springframework.jms.listener.DefaultMessageListenerContainer"><property name="connectionFactory" ref="connectionFactory" /><property name="destination" ref="topicDestination" /><property name="messageListener" ref="jmsMessageListener" /></bean></beans>

【ActiveMQ入门-10】ActiveMQ学习-通配符+异步接收
标签:
原文地址:http://www.cnblogs.com/ssslinppp/p/4468739.html