【ActiveMQ入门-10】ActiveMQ学习-通配符+异步接收
- . 用来分隔路径;
- * 用来匹配路径中的一节
- > 用来匹配任意节的路径
然而, 通配符中是为消费者服务的。==>即:消费者可以使用通配符来匹配目的地,而生产者不行。
1. 消费者:异步接收,实现
MessageListener类;



源文件:
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();}}
applicationContext-2.xml
<?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学习-通配符+异步接收的更多相关文章
- ActiveMQ入门之四--ActiveMQ持久化方式
消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重新启动后仍然可以将消息发送出去,如果把这种持久化和 ...
- ActiveMQ 入门和与 Spring 整合
ActiveMQ 入门演示 activemq 依赖 <dependency> <groupId>org.apache.activemq</groupId> < ...
- 【ActiveMQ入门-4】ActiveMQ学习-异步接收
总体说明: 1. 一个生产者/发布者:可以向多个目的地发送消息: 2. 每个目的地(destination)可以有多个订阅者或消费者: 如下图所示: 程序结构: 1. Publisher.java ...
- 【ActiveMQ入门-11】ActiveMQ学习-compositeDestination
概要: 前一章讲解了消费者如何通过通配符来匹配目的地,以实现一个消费者同时接收多个目的地的消息. 对于生产者来讲,可能存在下面的需求: 1. 同一条message可能要发送到多个Queue: 2. 同 ...
- ActiveMQ学习总结(2)——ActiveMQ入门实例教程
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击a ...
- 【ActiveMQ入门-5】ActiveMQ学习-消息持久性
ActiveMQ中的消息持久性 ActiveMQ很好的支持了消息的持久性(Persistence).消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是 ...
- Dubbo入门到精通学习笔记(十四):ActiveMQ集群的安装、配置、高可用测试,ActiveMQ高可用+负载均衡集群的安装、配置、高可用测试
文章目录 ActiveMQ 高可用集群安装.配置.高可用测试( ZooKeeper + LevelDB) ActiveMQ高可用+负载均衡集群的安装.配置.高可用测试 准备 正式开始 ActiveMQ ...
- Java消息中间件入门笔记 - ActiveMQ篇
入门 消息中间件带来的好处: 1)解耦:系统解耦 2)异步:异步执行 3)横向扩展 4)安全可靠 5)顺序保证 栗子: 通过服务调用让其它系统感知事件发生 系统之间高耦合 程序执行效率低 通过消息中间 ...
- .Net平台下ActiveMQ入门实例
1.ActiveMQ简介 先分析这么一个场景:当我们在网站上购物时,必须经过,下订单.发票创建.付款处理.订单履行.航运等.但是,当用户下单后,立即跳转到“感谢那您的订单” 页面.不仅如此,若果没有延 ...
随机推荐
- win764位下mysql-5.6.24-x64从安装到登录成功
1.安装 本人电脑win7,64位,需要安装mysql服务器.版本:mysql-5.6.24-x64.这里我用的是绿色版,免安装.由于免安装的原因,在服务里面并没有mysql的服务.这里我需要打开my ...
- flashfxp 命令行
以后更新软件时,尽量用bat命令行 http://www.flashfxp.com/forum/flashfxp/frequently-asked-questions-faq-/14748-comma ...
- OPENVZ低版本centos6.5安装BBR加速手记
玩 VPS,开机第一件事就是安装 BBR,至于效果怎么样还真不好说,依据不同的线路质量而定,但有总比没有好. 因为这次用的是 openvz 平台,所以找了一个网上的 ovz 专用的 BBR 一键安装代 ...
- 用MyEclipse JPA创建项目(三)
MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于PA的功能. 阅读本教程时,了解J ...
- PostgreSQL数据库创建只读用户总结
好久没有弄,有点忘了,今天有客户问这个问题,发现几个SQL还解决不了,于是总结一下: --以超级用户登录数据库,创建用户: postgres=# create user test_read_only ...
- NBUT 1219 Time 2010辽宁省赛
Time limit 1000 ms Memory limit 131072 kB Digital clock use 4 digits to express time, each digit ...
- 玩转TypeScript(3)--类型转换
使用强类型变量常常需要从一种类型向另一种类型转换,通常使用ToString或ParseInt可以来实现一些简单的转换,但是有时候需要像.NET语言中那样将一种类型显示的转换为另一种类型,在TypeSc ...
- Python3下安装pip和MySQLdb
MySQLdb的安装更曲折了.还是按照正常方法安装,下载MySQL-python-1.2.5版本,解压后python setup.py install,发现怎么装都会报错“ConfigParser.N ...
- CTF-练习平台-Misc之 隐写2
二.隐写2 下载文件后解压,发现是一个png图片,依照老套路查看属性,没有发现 用WinHex打开,在图片文件中,修改图片宽度,将箭头处的A改为F,保存后打开图片 发现flag(对于png的文件格式详 ...
- hive split 注意事项
hive字符串分割函数 split(str, regex) - Splits str around occurances that match regexTime taken: 0.769 secon ...