- 浏览: 1011354 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
原文出处:http://blog.chenlb.com/2010/01/activemq-hello.html
企业中各项目中相互协作的时候可能用得到消息通知机制。比如有东西更新了,可以通知做索引。
在 Java 里有 JMS 的多个实现。其中 apache 下的 ActiveMQ 就是不错的选择。还有一个比较热的是 RabbitMQ (是 erlang 语言实现的)。这里示例下使用 ActiveMQ
用 ActiveMQ 最好还是了解下 JMS
JMS 公共 | 点对点域 | 发布/订阅域 |
ConnectionFactory | QueueConnectionFactory | TopicConnectionFactory |
Connection | QueueConnection | TopicConnection |
Destination | Queue | Topic |
Session | QueueSession | TopicSession |
MessageProducer | QueueSender | TopicPublisher |
MessageConsumer | QueueReceiver | TopicSubscriber |
JMS 定义了两种方式:Quere(点对点);Topic(发布/订阅)。
ConnectionFactory 是连接工厂,负责创建Connection。
Connection 负责创建 Session。
Session 创建 MessageProducer(用来发消息) 和 MessageConsumer(用来接收消息)。
Destination 是消息的目的地。
详细的可以网上找些 JMS 规范(有中文版)。
下载 apache-activemq-5.3.0。http://activemq.apache.org/download.html ,解压,然后双击 bin/activemq.bat。运行后,可以在 http://localhost:8161/admin 观察。也有 demo, http://localhost:8161/demo 。把 activemq-all-5.3.0.jar 加入 classpath。
Jms 发送 代码:
- public static void main(String[] args) throws Exception {
- ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
- Connection connection = connectionFactory.createConnection();
- connection.start();
- Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
- Destination destination = session.createQueue("my-queue" );
- MessageProducer producer = session.createProducer(destination);
- for ( int i= 0 ; i< 3 ; i++) {
- MapMessage message = session.createMapMessage();
- message.setLong("count" , new Date().getTime());
- Thread.sleep(1000 );
- //通过消息生产者发出消息
- producer.send(message);
- }
- session.commit();
- session.close();
- connection.close();
- }
public static void main(String[] args) throws Exception { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("my-queue"); MessageProducer producer = session.createProducer(destination); for(int i=0; i<3; i++) { MapMessage message = session.createMapMessage(); message.setLong("count", new Date().getTime()); Thread.sleep(1000); //通过消息生产者发出消息 producer.send(message); } session.commit(); session.close(); connection.close(); }
Jms 接收代码:
- public static void main(String[] args) throws Exception {
- ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
- Connection connection = connectionFactory.createConnection();
- connection.start();
- final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
- Destination destination = session.createQueue("my-queue" );
- MessageConsumer consumer = session.createConsumer(destination);
- /*//listener 方式
- consumer.setMessageListener(new MessageListener() {
- public void onMessage(Message msg) {
- MapMessage message = (MapMessage) msg;
- //TODO something....
- System.out.println("收到消息:" + new Date(message.getLong("count")));
- session.commit();
- }
- });
- Thread.sleep(30000);
- */
- int i= 0 ;
- while (i< 3 ) {
- i++;
- MapMessage message = (MapMessage) consumer.receive();
- session.commit();
- //TODO something....
- System.out.println("收到消息:" + new Date(message.getLong( "count" )));
- }
- session.close();
- connection.close();
- }
public static void main(String[] args) throws Exception { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); Connection connection = connectionFactory.createConnection(); connection.start(); final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("my-queue"); MessageConsumer consumer = session.createConsumer(destination); /*//listener 方式 consumer.setMessageListener(new MessageListener() { public void onMessage(Message msg) { MapMessage message = (MapMessage) msg; //TODO something.... System.out.println("收到消息:" + new Date(message.getLong("count"))); session.commit(); } }); Thread.sleep(30000); */ int i=0; while(i<3) { i++; MapMessage message = (MapMessage) consumer.receive(); session.commit(); //TODO something.... System.out.println("收到消息:" + new Date(message.getLong("count"))); } session.close(); connection.close(); }
启动 JmsReceiver 和 JmsSender 可以在看输出三条时间信息。当然 Jms 还指定有其它格式的数据,如 TextMessage
结合 Spring 的 JmsTemplate 方便用:
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"
- xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" >
- <!-- 在非 web / ejb 容器中使用 pool 时,要手动 stop,spring 不会为你执行 destroy-method 的方法
- < bean id = "jmsFactory" class = "org.apache.activemq.pool.PooledConnectionFactory" destroy-method = "stop" >
- < property name = "connectionFactory" >
- < bean class = "org.apache.activemq.ActiveMQConnectionFactory" >
- < property name = "brokerURL" value = "tcp://localhost:61616" />
- </ bean >
- </ property >
- </ bean >
- -->
- < bean id = "jmsFactory" class = "org.apache.activemq.ActiveMQConnectionFactory" >
- < property name = "brokerURL" value = "tcp://localhost:61616" />
- </ bean >
- < bean id = "jmsTemplate" class = "org.springframework.jms.core.JmsTemplate" >
- < property name = "connectionFactory" ref = "jmsFactory" />
- < property name = "defaultDestination" ref = "destination" />
- < property name = "messageConverter" >
- < bean class = "org.springframework.jms.support.converter.SimpleMessageConverter" />
- </ property >
- </ bean >
- < bean id = "destination" class = "org.apache.activemq.command.ActiveMQQueue" >
- < constructor-arg index = "0" value = "my-queue" />
- </ bean >
- </ 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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 在非 web / ejb 容器中使用 pool 时,要手动 stop,spring 不会为你执行 destroy-method 的方法 <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop"> <property name="connectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> </property> </bean> --> <bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="jmsFactory" /> <property name="defaultDestination" ref="destination" /> <property name="messageConverter"> <bean class="org.springframework.jms.support.converter.SimpleMessageConverter" /> </property> </bean> <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg index="0" value="my-queue" /> </bean> </beans>
sender:
- public static void main(String[] args) {
- ApplicationContext ctx = new FileSystemXmlApplicationContext( "classpath:app*.xml" );
- JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate" );
- jmsTemplate.send(new MessageCreator() {
- public Message createMessage(Session session) throws JMSException {
- MapMessage mm = session.createMapMessage();
- mm.setLong("count" , new Date().getTime());
- return mm;
- }
- });
- }
public static void main(String[] args) { ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:app*.xml"); JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate"); jmsTemplate.send(new MessageCreator() { public Message createMessage(Session session) throws JMSException { MapMessage mm = session.createMapMessage(); mm.setLong("count", new Date().getTime()); return mm; } }); }
receiver:
- public static void main(String[] args) {
- ApplicationContext ctx = new FileSystemXmlApplicationContext( "classpath:app*.xml" );
- JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate" );
- while ( true ) {
- Map<String, Object> mm = (Map<String, Object>) jmsTemplate.receiveAndConvert();
- System.out.println("收到消息:" + new Date((Long)mm.get( "count" )));
- }
- }
public static void main(String[] args) { ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:app*.xml"); JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate"); while(true) { Map<String, Object> mm = (Map<String, Object>) jmsTemplate.receiveAndConvert(); System.out.println("收到消息:" + new Date((Long)mm.get("count"))); } }
注意:直接用 Jms 接口时接收了消息后要提交一下,否则下次启动接收者时还可以收到旧数据。有了 JmsTemplate 就不用自己提交 session.commit() 了。如果使用了 PooledConnectionFactory 要把 apache-activemq-5.3.0\lib\optional\activemq-pool-5.3.0.jar 加到 classpath
参考资料:
发表评论
-
Advanced Message Queuing Protocol ( 3 ) 逻辑模型
2011-05-07 22:04 1168Sessions 建立在不同容器中的两个节点的链接必 ... -
Advanced Message Queuing Protocol ( 2 ) 逻辑模型
2011-05-07 22:04 967Nodes and Links 一个AMQP的网络包 ... -
Advanced Message Queuing Protocol ( 1 ) 概述
2011-05-07 22:03 1201The Advanced Message Queuing ... -
Apache Qpid (1) -- build
2011-05-07 22:02 1939http://qpid.apache.org/index.h ... -
ActiveMQ技术预研报告【转】
2011-04-22 14:44 1907ActiveMQ技术预研报告 研究部朱懋柱 1.文 ... -
ActiveMQ与MSMQ的异同【转】
2011-04-22 14:14 1910.NET下发送和接收ActiveMQ A:下载Act ... -
ActiveMQ在C#中的应用
2011-04-21 16:18 1195ActiveMQ 是个好东东,不必多说。ActiveM ... -
ActiveMQ实战之 Queue点对点消息【转】
2011-04-18 23:15 1206对于此类消息,其实就是指使用JMS中的发P2P(点对点)消息模 ... -
ActiveMQ实战之 Topic发布订阅消息【转】
2011-04-18 23:14 1189对于此类消息,其实就是指使用JMS中的发布订阅消息模型的消息, ... -
ActiveMQ实战(4):JMS的安全性【转】
2011-04-18 22:52 1227对于JMS服务的安全控制,ActiveMQ提供两种方式:简单授 ... -
ActiveMQ实战(3):Web控制台的安全性【转】
2011-04-18 22:52 1335安装好ActiveMQ后,其默认没有任何安全控制,任何人都可以 ... -
ActiveMQ实战(2):测试其是否正常工作【转】
2011-04-18 22:51 1201既然ActiveMQ安装好了并启动成功,接下来我们就编写一个测 ... -
ActiveMQ实战(1):安装与运行【转】
2011-04-18 22:45 1779ActiveMQ的项目主页:http://activemq.a ... -
[转] JMS开源比较
2011-03-30 23:46 1181Java开源JMS消息中间件 ... -
activemq5.2发送和接收BlobMessage简单实例
2011-03-29 23:45 1164package com.work.activemq ... -
ActiveMQ学习笔记----ActiveMQ和JBossMQ性能对比测试代码
2011-03-29 23:44 1221本文描述了对ActiveMQ进行性能测试的代码。性能测试用 ... -
ActiveMQ 实例
2011-03-29 23:21 10372009-06-24 ProducerTool.java ... -
activemq持久化配置,设置为主从模式(带复制的主从模式,应用mysql数据库)
2011-03-29 09:12 1819activemq持久化配置,设置为主从模式(带复制的主从模 ... -
ActiveMQ持久化消息的三种方式
2011-03-29 09:11 13631:前言 这一段给公司开发消息总线有机会研究A ... -
什么是JMS(Java消息服务)
2011-03-28 19:28 899在不同系统之间交换信息的一大障碍是如何在精确交换和格式化数据方 ...
相关推荐
这个示例展示了 ActiveMQ 基本的使用流程,包括连接创建、消息发送和接收。在实际应用中,ActiveMQ 提供了丰富的特性和配置选项,如持久化、事务支持、集群、网络连接、多种协议支持等,能够满足复杂的企业级消息...
发布于2013-4-27企业中各项目中相互协作的时候可能用得到消息...这里示例下使用 ActiveMQJMS定义了两种方式:Quere(点对点);Topic(发布/订阅)。ConnectionFactory是连接工厂,负责创建Connection。Session创建M
标题中的“ActiveMQ示例”指的是Apache ActiveMQ的使用实例,这是一个开源的消息中间件,用于在分布式系统中传输消息。ActiveMQ是Java消息服务(JMS)的实现,支持多种协议,如OpenWire、STOMP、AMQP和MQTT,能够...
本示例中,使用maven管理,完美解决各种依赖问题,不需要自行配置,导入项目等待eclipse自行下载jar包后即可; 请将本maven项目引入你自己的maven项目中(在你自己的pom.xml文件中配置这个项目的gourp和id以及版本号)...
`readme.txt`可能包含了一些关于如何使用这些代码示例的说明,包括如何配置ActiveMQ服务器地址、如何创建消息以及如何启动和停止producer和consumer。开发者应按照这些指南进行操作,以便了解ActiveMQ在实际项目中的...
描述中提到的“activemq示例的源码,聊天室,实现多人聊天”,意味着这个压缩包可能包含了一个使用ActiveMQ构建的聊天室应用的源代码。这样的示例通常会展示如何利用ActiveMQ进行实时通信,创建一个可以处理多个用户...
压缩包中的 "ActiveMQ Demo" 可能包括了示例代码和指南,展示了如何创建和使用ActiveMQ。通常,它会涵盖以下步骤: 1. **配置连接**: 创建连接工厂以连接到ActiveMQ服务器。 2. **创建生产者**: 编写代码来创建消息...
总结起来,SpringActiveMQ入门示例教你如何在Spring应用中配置和使用ActiveMQ进行消息传递。通过这个示例,你可以学习到如何设置连接工厂,创建生产者和消费者,以及如何在Eclipse和Maven环境下运行和测试这个集成。...
分别实现生产者-消费者模式和发布-订阅模式,作为java编程发送消息和消费消息的基础示例。 源码主要包含如下内容: 1.spring boot配置初始化activeMQ 2.队列类型queue,生产者发送队列消息,以及消费者消费相关队列...
2. **JMS 使用 ActiveMQ 传送文件.doc** - 这个文档应该直接涵盖了如何使用ActiveMQ进行文件传输的具体步骤,可能包括了创建消息、设置目的地、发送和接收文件的代码示例,以及如何处理错误和异常的情况。...
总的来说,ActiveMQ示例展示了如何在Java环境中利用消息中间件进行高效、可靠的通信。通过服务器端和客户端的交互,结合监听器机制,我们可以实现各种消息传递模式,提高系统的灵活性和可扩展性。理解和掌握ActiveMQ...
标题"memcached和activeMQ的JAVA示例代码"表明这是一个关于使用Java编程语言实现的,针对memcached缓存系统和activeMQ消息中间件的示例项目。这通常是为了帮助开发者理解如何在实际应用中整合这两种技术。 描述中的...
**ActiveMQ 入门示例代码详解** ActiveMQ 是 Apache 开源组织开发的一款高效、可靠的开源消息中间件,它遵循 JMS(Java Message Service)规范,支持多种协议,如 AMQP、STOMP、OpenWire 等,广泛应用于分布式系统...
将ActiveMQ与Spring整合,可以方便地在Spring应用中使用消息队列,实现异步处理和分布式通信。 **一、ActiveMQ安装与配置** 在Linux系统中安装ActiveMQ,首先需要下载ActiveMQ的二进制包,解压后将其放置在合适的...
在本项目示例中,我们将深入探讨如何使用MyEclipse 10开发基于ActiveMQ的消息通信应用。 1. **ActiveMQ基础概念** - **消息队列**: 消息队列是ActiveMQ的核心,它存储和转发消息,确保消息的可靠传输。 - **生产...
ActiveMQ是一种开源的,实现了JMS规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。 网盘地址:链接: https://pan.baidu.com/s/1nvOcn0l 密码: 4esh 话说怎么上传...
在上述示例中,我们使用了队列,但根据需求,你可以选择适合的类型。 6. **消息持久化**:ActiveMQ支持消息的持久化,这意味着即使在服务器重启后,未被消费的消息也能恢复。通过配置`JmsTemplate`或ActiveMQ服务器...
本示例代码提供了一个完整的Java项目,帮助开发者理解如何在实际应用中使用ActiveMQ。 在讲解ActiveMQ的基本概念和示例代码之前,我们先来了解下**JMS(Java Message Service)**。JMS是一种为应用程序提供创建、...
本示例主要关注三个流行的消息队列服务:ActiveMQ、RabbitMQ以及AliyunMQ,它们都是基于Java消息服务(JMS)的实现。 首先,ActiveMQ是由Apache开发的开源消息代理,它是JMS 1.1规范的实现者。ActiveMQ支持多种协议...