- 浏览: 1499738 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
在Spring框架中使用JMS传递消息有两种方式:JMS template和message listener container,前者用于同步收发消息,后者用于异步收发消息。
本文主要讲述用JMS template同步收发消息。
1. JMS template综述
使用JmsTemplate收发消息可以显著减少开发的精力投入。使用JmsTemplate时,不需要费心考虑连接到JMS provider(如ActiveMQ),建立JMS Session(如QueueSession),建立消息生产者(如QueueSender),甚至不用新建一个JMS消息(如TextMessage)。JmsTemplate能够自动将各种类型如String、Byte[]等转换为响应的JMS消息对象类型,当然也可以自己写Converter转换复杂的消息。
JmsTemplate常用的方法有send、convertAndSend、receive和convertAndReceive。
2. 详细步骤
下面通过一个例子详细讲解使用JmsTemplate同步收发消息。
(1) 环境
JMS1.1;apache-activemq-5.4.0;Spring-2.5.4;JDK-1.5;myeclipse7.5
(2) 源代码(Java Project)
i) 结构
ii) 源代码
.classpath:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources"/>
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry exported="true" kind="lib" path="lib/jms-1.1.jar"/>
<classpathentry exported="true" kind="lib" path="lib/spring.jar"/>
<classpathentry exported="true" kind="lib" path="lib/activemq-all-5.4.0.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
jndi.properties:
java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:61616
java.naming.security.principal=system
java.naming.security.credentials=manager
connectionFactoryNames = QueueCF
queue.queue1 = jms.queue1
app-context.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:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="
http://www.springframework.org/schema/beans spring-beans-2.0.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-2.5.xsd">
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">
org.apache.activemq.jndi.ActiveMQInitialContextFactory</prop>
<prop key="java.naming.provider.url">tcp://localhost:61616</prop>
<prop key="java.naming.security.principal">system</prop>
<prop key="java.naming.security.credentials">manager</prop>
</props>
</property>
</bean>
<bean id="jndiQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate"/>
<property name="jndiName" value="QueueCF"/>
</bean>
<bean id="queueConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="jndiQueueConnectionFactory"/>
<property name="sessionCacheSize" value="1"/>
</bean>
<bean id="queueDestination"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate"/>
<property name="jndiName" value="queue1"/>
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="queueConnectionFactory"/>
<property name="defaultDestinationName" value="queue1"/>
<property name="pubSubDomain" value="false"/>
</bean>
<bean id="jmsSender" class="com.jms.client.JMSSender">
<property name="jmsTemplate" ref="jmsTemplate"/>
<property name="queueName" value="queue1"/>
</bean>
</beans>
JMSReceiverSync.java:
package com.jms.server;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
public class JMSReceiverSync {
public static void main(String[] args) {
try {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("app-context.xml");
JmsTemplate jmsTemplate = (JmsTemplate)ctx.getBean("jmsTemplate");
int counter = 0;
while(counter < 10) {
Object msg = jmsTemplate.receiveAndConvert();
if (msg instanceof String) {
System.out.println("Received: " + msg);
}
counter++;
}
System.exit(0);
} catch (Exception up) {
up.printStackTrace();
}
}
}
JMSSender.java:
package com.jms.client;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
public class JMSSender {
public void sendMessage() throws Exception {
MessageCreator msg = new MessageCreator() {
public Message createMessage(Session session)throws JMSException {
TextMessage msg = session.createTextMessage("TEST 1");
return msg;
}
};
jmsTemplate.send(queueName, msg);
System.out.println("Message Sent...");
}
public JmsTemplate jmsTemplate = null;
public String queueName = null;
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void setQueueName(String queueName) {
this.queueName = queueName;
}
}
JMSSenderApp.java:
package com.jms.client;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class JMSSenderApp {
public static void main(String[] args) {
try {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("app-context.xml");
JMSSender jmsSender = (JMSSender)ctx.getBean("jmsSender");
jmsSender.sendMessage();
System.exit(0);
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
(3) 说明
可以看到,用JmsTemplate收发消息非常简单,因为JmsTemplate几乎帮我们做了大多数的工作,相关关系如下图所示(可结合app-context.xml理解):
步骤与不使用Spring相似,只是都是通过配置完成的。
3. 疑惑
明明用app-context.xml就包含所有的上下文信息了,可是删掉jndi.properties依然会出错。
发表评论
-
JMS命名空间支持
2011-09-02 16:13 1763Spring 2.5引入了XML命名空间以简化JMS的配置。使 ... -
JMS与Spring之二(用message listener container异步收发消息)
2011-09-02 14:55 2967本文主要参考Java Message Service(2nd) ... -
深入浅出JMS(二)——JMS的组成
2011-09-02 14:51 2037http://blog.csdn.net/aking21ali ... -
JMS支持
2011-09-02 14:39 143414.1. 介绍 Spr ... -
深入浅出JMS(一)——JMS简介
2011-09-01 17:12 2921如果手机只能进行实时 ... -
jms消息类型
2011-09-01 17:08 1342在JMS1.1规范中规定了5种JMS消息类型,分别如下: 1 ... -
ActiveMQ入门
2011-09-01 16:58 19751、环境 ... -
Spring与Jms结合的实例
2011-09-01 14:22 1869另见: ActiveMQ5.0实战一: 安装配置ActiveM ... -
笔记之Spring-JMS
2011-08-31 19:24 1770JMS简介:一种应用于异 ... -
spring JMS、activemq中消费者收不到生产者发送的消息的原因解析
2011-08-31 16:53 22230我们使用jms一般是使用spring-jms和activemq ... -
常见Java开源JMS消息中间件及特性简介
2011-07-18 17:21 1481JMS开源消息中间件有很多,本文对常见的几种进行了列举和简单比 ... -
JMS-详解
2011-07-18 16:29 1206JMS-详解 -
JMS
2011-07-18 16:13 1489http://baike.baidu.com/view/157 ...
相关推荐
JMS与Spring之二(用message listener container异步收发消息) 在本文中,我们将探讨使用 message listener container 在 Spring 框架中异步收发 JMS 消息的方法。Message listener container 是 Spring 提供的一...
Spring 整合 JMS 实现同步收发消息是指在 Spring 框架下使用 JMS(Java Message Service)协议来实现消息的同步收发。JMS 是一个基于 Java 的消息服务 API,提供了统一的消息服务模型,能够在不同的应用程序之间进行...
在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而JMS(Java Message Service)则是Java平台上的消息中间件标准,用于应用程序之间的异步通信。本篇文章将详细探讨如何通过Spring框架整合JMS,特别是...
而Spring框架是一个全面的企业级应用开发框架,其提供的Spring JMS模块使得与消息系统如ActiveMQ的集成变得简单。 为了在Spring项目中使用ActiveMQ,我们需要添加相应的依赖。在Maven项目的pom.xml文件中,需要引入...
在Spring中,我们可以利用Spring JMS模块来处理与消息服务器的交互。ActiveMQ则作为一个消息代理,负责接收、存储和转发消息,确保数据在应用程序之间安全传输。 集成步骤如下: 1. **配置ActiveMQ**: - 下载并...
在这些实例中,我们可能会看到如何使用Spring的JmsTemplate或者MessageListenerContainer来注入JMS功能。Spring的依赖注入(Dependency Injection,DI)特性使得配置和管理JMS组件变得更加灵活。 4. **消息监听** ...
5. **MessageTemplate**:Spring的JmsTemplate提供了一种简单的API,用于发送消息到目的地,接收消息,或者执行收发操作。 **三、优化整合的关键点** 1. **连接池**:为提高性能,可以使用PooledConnectionFactory...
而ActiveMQ是Apache出品的一款开源消息中间件,它遵循JMS(Java Message Service)规范,用于处理应用程序之间的异步通信。本教程将详细介绍如何在Spring Boot项目中集成ActiveMQ,实现消息接收的Demo。 首先,我们...
通过以上步骤,你已经成功地将ActiveMQ与Spring集成,并实现了基本的消息收发功能。在实际项目中,你可能需要根据需求调整配置,例如设置消息的持久化、事务支持、消息优先级等高级特性。此外,ActiveMQ还提供了管理...
2. **JMS Template**:Spring提供了`JmsTemplate`,这是一个强大的工具,用于发送和接收JMS(Java Message Service)消息。通过它,我们可以以声明式的方式操作消息,简化了代码。 3. **Message Listeners**:我们...
`JmsTemplate`是Spring中处理JMS的核心工具,它提供了一种声明式的方式来发送和接收消息。 在生产者(消息发送方)代码中,我们创建一个实现了`ProducerService`接口的`ProducerServiceImpl`类。该类注入了`...