`
ssxxjjii
  • 浏览: 938065 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用 ActiveMQ 示例

阅读更多

企业中各项目中相互协作的时候可能用得到消息通知机制。比如有东西更新了,可以通知做索引。

在 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 发送 代码:

  1. public static void main(String[] args) throws Exception {  
  2.     ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();  
  3.   
  4.     Connection connection = connectionFactory.createConnection();  
  5.     connection.start();  
  6.   
  7.     Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);  
  8.     Destination destination = session.createQueue("my-queue");  
  9.   
  10.     MessageProducer producer = session.createProducer(destination);  
  11.     for(int i=0; i<3; i++) {  
  12.         MapMessage message = session.createMapMessage();  
  13.         message.setLong("count"new Date().getTime());  
  14.         Thread.sleep(1000);  
  15.         //通过消息生产者发出消息  
  16.         producer.send(message);  
  17.     }  
  18.     session.commit();  
  19.     session.close();  
  20.     connection.close();  
  21. }  

Jms 接收代码:

  1. public static void main(String[] args) throws Exception {  
  2.     ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();  
  3.   
  4.     Connection connection = connectionFactory.createConnection();  
  5.     connection.start();  
  6.   
  7.     final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);  
  8.     Destination destination = session.createQueue("my-queue");  
  9.   
  10.     MessageConsumer consumer = session.createConsumer(destination);  
  11.     /*//listener 方式 
  12.     consumer.setMessageListener(new MessageListener() { 
  13.  
  14.         public void onMessage(Message msg) { 
  15.             MapMessage message = (MapMessage) msg; 
  16.             //TODO something.... 
  17.             System.out.println(" 收到消息:" + new Date(message.getLong("count"))); 
  18.             session.commit(); 
  19.         } 
  20.  
  21.     }); 
  22.     Thread.sleep(30000); 
  23.     */  
  24.     int i=0;  
  25.     while(i<3) {  
  26.         i++;  
  27.         MapMessage message = (MapMessage) consumer.receive();  
  28.         session.commit();  
  29.   
  30.         //TODO something....  
  31.         System.out.println("收到消 息:" + new Date(message.getLong("count")));  
  32.     }  
  33.   
  34.     session.close();  
  35.     connection.close();  
  36. }  

启动 JmsReceiver 和 JmsSender 可以在看输出三条时间信息。当然 Jms 还指定有其它格式的数据,如 TextMessage

结合 Spring 的 JmsTemplate 方便用:

xml:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  4.   
  5. <!-- 在非 web / ejb 容器中使用 pool 时,要手动 stop,spring 不会为 你执行 destroy-method 的方法  
  6.     <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">  
  7.         <property name="connectionFactory">  
  8.             <bean class="org.apache.activemq.ActiveMQConnectionFactory">  
  9.                 <property name="brokerURL" value="tcp://localhost:61616" />  
  10.             </bean>  
  11.         </property>  
  12.     </bean>  
  13. -->  
  14.     <bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  
  15.         <property name="brokerURL" value="tcp://localhost:61616" />  
  16.     </bean>  
  17.     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
  18.         <property name="connectionFactory" ref="jmsFactory" />  
  19.         <property name="defaultDestination" ref="destination" />  
  20.         <property name="messageConverter">  
  21.             <bean class="org.springframework.jms.support.converter.SimpleMessageConverter" />  
  22.         </property>  
  23.     </bean>  
  24.   
  25.     <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">  
  26.         <constructor-arg index="0" value="my-queue" />  
  27.     </bean>  
  28.   
  29. </beans>  

sender:

  1. public static void main(String[] args) {  
  2.     ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:app*.xml");  
  3.   
  4.     JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate");  
  5.   
  6.     jmsTemplate.send(new MessageCreator() {  
  7.   
  8.         public Message createMessage(Session session) throws JMSException {  
  9.             MapMessage mm = session.createMapMessage();  
  10.             mm.setLong("count"new Date().getTime());  
  11.             return mm;  
  12.         }  
  13.   
  14.     });  
  15. }  

receiver:

  1. public static void main(String[] args) {  
  2.     ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:app*.xml");  
  3.   
  4.     JmsTemplate jmsTemplate = (JmsTemplate) ctx.getBean("jmsTemplate");  
  5.     while(true) {  
  6.         Map<String, Object> mm =  (Map<String, Object>) jmsTemplate.receiveAndConvert();  
  7.         System.out.println("收到消 息:" + new Date((Long)mm.get("count")));  
  8.     }  
  9. }  

注意:直接用 Jms 接口时接收了消息后要提交一下,否则下次启动接收者时还可以收到旧数据。有了 JmsTemplate 就不用自己提交 session.commit() 了。如果使用了 PooledConnectionFactory 要把 apache-activemq-5.3.0\lib\optional\activemq-pool-5.3.0.jar 加到 classpath

分享到:
评论

相关推荐

    使用ActiveMQ示例.pdf

    使用ActiveMQ示例.pdf

    activemq示例

    activemq示例,里面存在activemq示例的源码,聊天室,实现多人聊天,

    使用ActiveMQ示例

    发布于2013-4-27企业中各项目中相互协作的时候可能用得到消息...这里示例下使用 ActiveMQJMS定义了两种方式:Quere(点对点);Topic(发布/订阅)。ConnectionFactory是连接工厂,负责创建Connection。Session创建M

    activeMQ示例 activeMQ demo,java分布式技术

    本示例中,使用maven管理,完美解决各种依赖问题,不需要自行配置,导入项目等待eclipse自行下载jar包后即可; 请将本maven项目引入你自己的maven项目中(在你自己的pom.xml文件中配置这个项目的gourp和id以及版本号)...

    JAVA编程之Spring boot-activeMQ示例

    分别实现生产者-消费者模式和发布-订阅模式,作为java编程发送消息和消费消息的基础示例。 源码主要包含如下内容: 1.spring boot配置初始化activeMQ 2.队列类型queue,生产者发送队列消息,以及消费者消费相关队列...

    SpringActiveMQ入门示例

    Spring整合JMS(activeMQ)的示例,开发环境为eclipse+maven

    activeMQ代码示例简单通信

    ActiveMQ是一种开源的,实现了JMS规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。

    activemq 入门示例代码

    这是一个activemq应用的简单示例代码,使用maven搭建的.适合刚刚开始学习activemq的程序员

    ActiveMQ与Spring整合示例Demo

    ActiveMQ与Spring整合示例Demo,ActiveMQ安装在linux系统中

    activeMQ代码示例API通信

    ActiveMQ是一种开源的,实现了JMS规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。 网盘地址:链接: https://pan.baidu.com/s/1nvOcn0l 密码: 4esh 话说怎么上传...

    ActiveMQ / RabbitMQ 示例

    ActiveMQ RabbitMQ AliyunMQ 示例程序

    ActiveMQ完整项目示例

    ActiveMQ完整项目示例,用MyEclipse 10开发,欢迎下载学习

    ActiveMQ示例代码

    本示例代码提供了一个完整的Java项目,帮助开发者理解如何在实际应用中使用ActiveMQ。 在讲解ActiveMQ的基本概念和示例代码之前,我们先来了解下**JMS(Java Message Service)**。JMS是一种为应用程序提供创建、...

    memcached和activeMQ的JAVA示例代码

    memcached 和 activeMQ 的入门级示例代码,JAVA eclipse工程

    ActiveMQ代码示例

    自己总结搜集还有自己写的一些ActiveMQ示例。

    activeMQ 示例

    NULL 博文链接:https://happyzj.iteye.com/blog/935742

    activemq-samples:Apache ActiveMQ 示例

    activemq-samples Apache ActiveMQ 示例

    activeMQ示例

    activeMQ,java-server java-client,listener监听,留在此处备份

    ActiveMQ入门示例

    ActiveMQ简单入门示例,采用点对点的通信方式

    activeMQ简单入门案例

    使用activeMQ实现生产者消费者

Global site tag (gtag.js) - Google Analytics