`
bloodwolf_china
  • 浏览: 131632 次
社区版块
存档分类
最新评论

JMS Apache ActiveMQ使用(2)

    博客分类:
  • JMS
阅读更多
下面就进行程序开发,没得说,当然是spring了
使用spring开发JMS比较简单,直接使用的是JmsTemplate,需要几个相关对象。

    ConnectionFactory:创建与ActiveMQ连接的工厂类
    Destination:目标Topic或Queue
    MessageConverter:在Java POJO和JMS Message进行转换

关于JMS的其他接口如Session,MessageProducer/MessageConsumer都是在JmsTemplate内部处理,不需要开发关注具体细节。
首先配置分别针对Topic和Queue的JmsTemplate(其实发送和接受消息代码中不需要关心是Topic还是Queue,JMS 1.1标准对于两者在客户端的处理已经可以通用了)

spring-jms.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
		"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
	<bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<property name="brokerURL" value="failover:(tcp://localhost:61616)"/>
		<property name="transportListener">
			<bean class="com.viva.server.message.jms.JmsTransportListener"/>
		</property>
  </bean>

	<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg value="Huzl.queue"></constructor-arg>
	</bean>

	<bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
		<constructor-arg value="Huzl.topic"></constructor-arg>
	</bean>

	<bean id="messageConvert" class="com.viva.server.message.jms.VivaMessageConvert"/>

	<bean id="queueTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="jmsFactory" />
		<property name="defaultDestination" ref="queueDestination"/>
		<property name="messageConverter" ref="messageConvert"/>
    </bean>

	<bean id="topicTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="jmsFactory" />
		<property name="defaultDestination" ref="topicDestination"/>
		<property name="messageConverter" ref="messageConvert"/>
    </bean>
</beans>

VivaMessageConvert.java代码,使用的是JMS的MapMessage,而VivaUserRegisterMessage类是业务中用到的POJO,代码就不贴出来了。
import org.springframework.jms.support.converter.MessageConversionException;
import org.springframework.jms.support.converter.MessageConverter;

import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;
import java.util.Date;

/**
 * User: bloodwolf_china
 * Date: 2008-6-24
 * Time: 15:20:42
 * Descript:
 */
public class VivaMessageConvert implements MessageConverter {
	public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
		MapMessage msg = session.createMapMessage();
		VivaUserRegisterMessage registerMessage = (VivaUserRegisterMessage) object;
		msg.setLong("RegisterTime",registerMessage.getRegisterTime().getTime());
		msg.setInt("UserId",registerMessage.getUserId());
		msg.setString("Tel",registerMessage.getTel());
		return msg;  
	}

	public Object fromMessage(Message message) throws JMSException, MessageConversionException {
		MapMessage msg = (MapMessage) message;
		VivaUserRegisterMessage registerMessage = new VivaUserRegisterMessage();
		registerMessage.setRegisterTime(new Date(msg.getLong("RegisterTime")));
		registerMessage.setUserId(msg.getInt("UserId"));
		registerMessage.setTel(msg.getString("Tel"));
		return registerMessage;
	}
}

到这儿客户端发送消息的准备工作已经完成了,可以从spring取得queueTemplate/topicTemplat发送JMS Message了
注意其中brokerURL的值为"failover:(tcp://localhost:61616)",其中failover关键字表示客户端与ActiveMQ Server的连接中断后(如Server重新启动),客户端会自动重新连接,不需要在我们的代码中处理了。但是有个麻烦就是使用JmsTemplate发送消息时,当前的线程也会被wait直到重新连接ActiveMQ服务器成功,这种情况可能会导致线程被耗尽的危险。所以可以配置一个TransportListener,在连接错误时把消息放入缓存队列中,连接成功后再发送。
分享到:
评论
4 楼 xiaoqiS 2013-03-27  
请问这个类"com.viva.server.message.jms.JmsTransportListener"应该要怎么写
3 楼 bloodwolf_china 2008-11-12  
fastar119 写道

&lt;property name="brokerURL" value="failover:(tcp://localhost:61616)"/&gt; 配置了failover,连接不上,会一直重连MQ服务端,不会到发送消息这步, 所以配置&lt;property name="transportListener"&gt;&nbsp; &lt;bean class="com.viva.server.message.jms.JmsTransportListener"/&gt;&nbsp; 是不起作用的吧

如果用户在发送JMS Message时JmsTemplate的jmsFactory没有连接到JMS服务器,这个线程就会wait,一直等待连接成功,导致用户看来就是无响应。
2 楼 fastar119 2008-09-07  
<property name="brokerURL" value="failover:(tcp://localhost:61616)"/>
配置了failover,连接不上,会一直重连MQ服务端,不会到发送消息这步,

所以配置<property name="transportListener"> 
<bean class="com.viva.server.message.jms.JmsTransportListener"/> 

是不起作用的吧
1 楼 hallywang 2008-07-09  
没人顶你,我来顶,知道我是谁吧

相关推荐

    JMS Apache ActiveMQ 安装包

    Apache ActiveMQ JMS实现

    JMS 使用 ActiveMQ 传送文件

    2. **JMS 使用 ActiveMQ 传送文件.doc** - 这个文档应该直接涵盖了如何使用ActiveMQ进行文件传输的具体步骤,可能包括了创建消息、设置目的地、发送和接收文件的代码示例,以及如何处理错误和异常的情况。...

    apache-activemq Linux版本

    Apache ActiveMQ是业界广泛使用的开源消息中间件,尤其在Linux环境下表现出色。它基于Java语言开发,遵循Apache软件基金会的许可证,并且实现了多种消息传递协议,包括OpenWire、STOMP、AMQP和XMPP等。在Linux系统上...

    apache-activemq-5.16.5

    Apache ActiveMQ是业界广泛使用的开源消息中间件,它基于Java消息服务(JMS)标准,提供了高度可扩展、可靠的异步通信能力。标题"apache-activemq-5.16.5"指的是该软件的一个特定版本,即5.16.5版本,通常每个新版本...

    apache-activemq-5.9.0-bin

    2. **JMS兼容性**:ActiveMQ完全符合JMS 1.1规范,这意味着它能与任何JMS兼容的客户端库无缝集成,提供标准API进行消息处理。 3. **多种协议支持**:除了JMS,ActiveMQ还支持STOMP、AMQP、MQTT、WS-Notification等...

    apache-activemq-5.15.9.rar

    Apache ActiveMQ是Apache软件基金会开发的一个开源消息中间件,它基于Java Message Service (JMS) 规范,提供高效、可靠的消息传递服务。在本文中,我们将深入探讨Apache ActiveMQ,特别是针对“apache-activemq-...

    Apache+ActiveMQ教程

    2. **连接工厂**:配置连接到ActiveMQ服务器的连接工厂,用于创建JMS会话和消息生产者/消费者。 3. **目的地**:消息发送和接收的目标,可以是队列(Queue)或主题(Topic)。 在Spring中,我们通常会创建一个`...

    ApacheCamel-JMS-ActiveMQ

    在"Apache Camel JMS ActiveMQ"的使用样例中,我们有两个主要的场景: 1. **从本地读取信息推送到MQ中**:这一部分涉及到了Apache Camel的数据交换模型,即从本地源(可能是文件、数据库或任何其他数据源)读取信息...

    spring整合jms+activemq

    ActivemQ是Apache软件基金会的一个项目,它实现了JMS规范,提供了一个高效、可靠的中间件服务,用于处理消息队列。本文将深入探讨如何在Spring 3.0中整合JMS与ActivemQ,以及它们在实际应用中的关键知识点。 首先,...

    一头扎进JMS之ActiveMQ系列

    在提供的“一头扎进JMS之ActiveMQ视频教程”中,你将学习如何配置和使用ActiveMQ,包括安装和启动服务、创建和管理消息队列、使用生产者和消费者发送与接收消息、理解不同消息模式的工作原理,以及如何利用ActiveMQ...

    apache-activemq-5.17.3

    Apache ActiveMQ是开源的、基于Java消息服务(JMS)的应用服务器,它是Apache软件基金会的一部分。这个名为"apache-activemq-5.17.3"的压缩包包含了ActiveMQ的5.17.3版本,这是一个稳定且功能丰富的发布版本。在深入...

    Spring 实现远程访问详解——jms和activemq

    同时Apache ActiveMq是速度快,支持多种跨语言客户端和协议,同时配有易于使用的企业集成模式和优秀的特性,并且支持JMS1.1和J2EE1.4。具体特性见官网:http://activemq.apache.org/ 2. 什么是JMS JMS的全称是Java ...

    使用jms 操作ActiveMQ

    ActiveMQ是Apache软件基金会开发的一个开源消息中间件,它是JMS的实现之一,广泛应用于企业级应用中。 本教程将围绕"使用JMS操作ActiveMQ"这一主题,详细阐述如何通过JMS与ActiveMQ进行交互,包括创建生产者、消费...

    linux 下apache-activemq.zip

    2. **配置Apache ActiveMQ**: 配置文件位于`/opt/apache-activemq-5.x.x/conf`目录下,主要关注`activemq.xml`。这个文件定义了ActiveMQ的核心配置,包括消息存储、网络连接等。根据需求,你可以调整这些设置以...

    SpringJMS整合ActiveMQ

    详细内容: SpringJMS整合ActiveMQ.doc 详细说明文档 apache-activemq-5.8.0-bin.zip ActiveMQ安装包 JMSTest.rar MyEclipse8.5下web工程

    JMS+activeMQ 教程

    &lt;a href=http://activemq.apache.org/version-5-getting-started.html &gt;http://activemq.apache.org/version-5-getting-started.html&lt;/a&gt; &lt;a href=http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html&gt;...

    Apache ActiveMQ 入门最简单例子

    例如,在Java环境中,我们可以使用JMS(Java Message Service)API与ActiveMQ交互: 1. **消息生产者**:生产者创建一个连接到ActiveMQ服务器的ConnectionFactory,然后创建一个Session,用于发送消息。Session可以...

    JMS-ActiveMQ入门实例

    在众多JMS实现中,Apache ActiveMQ是一个非常流行的开源消息代理。ActiveMQ支持多种协议,如OpenWire、STOMP、AMQP、MQTT、WS和HTTP,并且能够与其他系统集成,例如通过RESTful API或WebSockets。此外,ActiveMQ还...

    JMS-activemq 实例(分ppt,eclipse工程,说明三部分)

    **ActiveMQ** 是Apache软件基金会开发的一个开源消息代理和队列服务器,它是JMS的一个实现。ActiveMQ支持多种协议,如OpenWire、STOMP、AMQP、MQTT和WS-Notification,以及多种语言的客户端,包括Java、C++、Python...

    Instant Apache ActiveMQ Messaging Application Development How-to源码

    Apache ActiveMQ是Apache软件基金会开发的一个开源消息中间件,它基于Java消息服务(JMS)规范,用于在分布式系统中实现可靠的消息传递。本指南主要关注如何使用ActiveMQ开发消息应用,通过`Instant Apache ActiveMQ...

Global site tag (gtag.js) - Google Analytics