Spring整合ActiveMQ实现JMS异步通信教程

需积分: 10 11 下载量 104 浏览量 更新于2024-09-18 收藏 26KB DOCX 举报
本资源提供了一个基于ActiveMQ实现JMS(Java消息服务)通信的简单示例,结合了Spring框架,旨在展示如何实现实时异步通讯功能。 在这个示例中,开发环境包括Eclipse Java EE版本、ActiveMQ 5.4.2、Tomcat 6和JDK 1.6。为了运行此项目,你需要将以下JAR包添加到项目的类路径中:activation-1.1.jar、log4j-1.2.14.jar、spring-2.5.6.jar以及activemq-all-5.4.2.jar。同时,确保设置了正确的环境变量,如TOMCAT_HOME、CATALINA_HOME和JAVA_HOME。 配置Spring应用上下文时,你需要创建一个名为`applicationContext-jms.xml`的配置文件。以下是这个文件的部分内容,展示了如何配置ActiveMQ连接工厂: ```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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd" default-autowire="byName"> <!-- 配置ActiveMQ ConnectionFactory --> <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> <!-- 创建一个JMS模板 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="connectionFactory" /> </bean> <!-- 其他相关配置,例如Destination(队列或主题)的定义等 --> ... </beans> ``` 在这个配置中,`ActiveMQConnectionFactory`用于创建到ActiveMQ服务器的连接,`brokerURL`属性指定服务器的地址和端口(默认是61616)。接着,`JmsTemplate`被配置以使用该连接工厂,它是一个用于发送和接收消息的便利工具类。 要实现JMS发送与接收,你需要创建消息生产者(Producer)和消费者(Consumer)。生产者使用`JmsTemplate`发送消息到目的地(Destination),可以是队列(Queue)或主题(Topic)。消费者则通过监听目的地来接收消息。如果使用队列,消息将被一个消费者接收;如果是主题,所有订阅的消费者都会收到消息。 以下是创建消息生产者和消费者的简要示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsTemplate; import javax.jms.Queue; public class MessageProducer { @Autowired private JmsTemplate jmsTemplate; public void sendMessage(String message) { jmsTemplate.convertAndSend("queue-name", message); } } public class MessageConsumer { @Autowired private JmsTemplate jmsTemplate; @JmsListener(destination = "queue-name") public void receiveMessage(String message) { System.out.println("Received message: " + message); } } ``` 在这个例子中,`MessageProducer`通过`convertAndSend`方法发送消息到名为"queue-name"的队列,而`MessageConsumer`使用`@JmsListener`注解监听同一队列并处理接收到的消息。 通过这种方式,你可以构建一个高效、可靠的异步通信系统,使得应用程序的不同组件之间可以解耦并独立运行。JMS和ActiveMQ的结合使用,加上Spring的抽象和自动化管理,大大简化了消息传递的实现过程。
2010-01-29 上传
基于Java通讯开发jms源代码 (jms通讯开发源码) java,net,socket,通讯开发,jms /* * @(#)Message.java 1.60 02/04/09 * * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved. * * SUN PROPRIETARY/CONFIDENTIAL. * This software is the proprietary information of Sun Microsystems, Inc. * Use is subject to license terms. * */ import java.util.Enumeration; public interface Message { String getJMSMessageID() throws JMSException; void setJMSMessageID(String id) throws JMSException; long getJMSTimestamp() throws JMSException; void setJMSTimestamp(long timestamp) throws JMSException; byte [] getJMSCorrelationIDAsBytes() throws JMSException; void setJMSCorrelationIDAsBytes(byte[] correlationID) throws JMSException; String getJMSCorrelationID() throws JMSException; Destination getJMSReplyTo() throws JMSException; void setJMSReplyTo(Destination replyTo) throws JMSException; Destination getJMSDestination() throws JMSException; void setJMSDestination(Destination destination) throws JMSException; int getJMSDeliveryMode() throws JMSException; void setJMSDeliveryMode(int deliveryMode) throws JMSException; boolean getJMSRedelivered() throws JMSException; void setJMSRedelivered(boolean redelivered) throws JMSException; String getJMSType() throws JMSException; void setJMSType(String type) throws JMSException; long getJMSExpiration() throws JMSException; void setJMSExpiration(long expiration) throws JMSException; int getJMSPriority() throws JMSException; void setJMSPriority(int priority) throws JMSException; void clearProperties() throws JMSException; boolean propertyExists(String name) throws JMSException; boolean getBooleanProperty(String name) throws JMSException; byte getByteProperty(String name) throws JMSException; short getShortProperty(String name) throws JMSException; int getIntProperty(String name) throws JMSException; long getLongProperty(String name) throws JMSException; float getFloatProperty(String name) throws JMSException; double getDoubleProperty(String name) throws JMSException; String getStringProperty(String name) throws JMSException; Object getObjectProperty(String name) throws JMSException; Enumeration getPropertyNames() throws JMSException; void setBooleanProperty(String name, boolean value) throws JMSException; void setByteProperty(String name, byte value) throws JMSException; void setShortProperty(String name, short value) throws JMSException; void setIntProperty(String name, int value) throws JMSException; void setLongProperty(String name, long value) throws JMSException; void setFloatProperty(String name, float value) throws JMSException; void setDoubleProperty(String name, double value) throws JMSException; void setStringProperty(String name, String value) throws JMSException; void setObjectProperty(String name, Object value) throws JMSException; void acknowledge() throws JMSException; void clearBody() throws JMSException; } 通讯开发必备源码资料!