如果用过JMS的话,会发现它类似写JDBC或JCA代码。它有创建或检索JMS资源的样板代码,每当你需要编写一个新类来发送或接受消息时,都得重复编写那个样本代码。下面列出了传统JMS实现涉及的步骤:
1、创建JNDI初始上下文context;
2、从JNDI上下文获得队列连接工厂;
3、从队列连接工厂取得队列Queue;
4、创建一个Session对象;
5、创建一个发送或接受对象;
6、利用第5部创建的发送或接受对象发送或接受消息;
7、处理完消息后,关闭所有JMS资源。
在JBOSS中配置:
<?xml version="1.0" encoding="UTF-8"?> <!-- $Id: mail-service.xml 62350 2007-04-15 16:50:12Z dimitris@jboss.org $ --> <server> <!-- ==================================================================== --> <!-- Mail Connection Factory --> <!-- ==================================================================== --> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=longgangbai"> <attribute name="JNDIName">queue/longgangbai</attribute> <depends optional-attribute-name="DestinationManager" >jboss.mq:service=DestinationManager</depends> </mbean> </server>
Spring中JMS的配置如下:
<?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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 设置消息服务的初始化参数信息 --> <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> <property name="environment"> <props> <prop key="java.naming.factory.initial"> org.jnp.interfaces.NamingContextFactory </prop> <prop key="java.naming.provider.url"> jnp://localhost:1099 </prop> <prop key="java.naming.factory.url.pkgs"> org.jboss.naming:org.jnp.interfaces </prop> </props> </property> </bean> <!-- 创建消息服务的连接工厂的信息 JMS1.02 TopicConnectionFactory 和QueueConnectionFactory JMS1.1 TopicConnectionFactory 和QueueConnectionFactory合并为ConnectionFactory --> <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>ConnectionFactory</value> </property> <property name="jndiTemplate"> <ref local="jndiTemplate"/> </property> </bean> <!-- 创建JMS的目的地信息 --> <bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>queue/longgangbai</value> </property> <property name="jndiTemplate"> <ref local="jndiTemplate"/> </property> </bean> <!-- 创建JMS发送信息的模板的对象 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory"> <ref local="connectionFactory"/> </property> <property name="defaultDestination"> <ref local="destination"/> </property> </bean> </beans>
Spring中JMS的代码如下:
package com.easyway.jboss.jms.ptp.spring.service; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.core.MessageCreator; /** * Spring中JMS的简单应用 * @author longgangbai * */ public class JmsTemplate11 { private static final Log log=LogFactory.getLog(JmsTemplate11.class); public static void main(String[] args) { ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); JmsTemplate jt=(JmsTemplate)ctx.getBean("jmsTemplate"); jt.send(new MessageCreator(){ @Override public Message createMessage(Session session) throws JMSException { return session.createTextMessage("the spring queue /TestQueue"); } }); log.info("发送信息成功!"); } }
客户端的配置:applicationContext-jms-receive.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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 设置消息服务的初始化参数信息 --> <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> <property name="environment"> <props> <prop key="java.naming.factory.initial"> org.jnp.interfaces.NamingContextFactory </prop> <prop key="java.naming.provider.url"> jnp://localhost:1099 </prop> <prop key="java.naming.factory.url.pkgs"> org.jboss.naming:org.jnp.interfaces </prop> </props> </property> </bean> <!-- 创建消息服务的连接工厂的信息 JMS1.02 TopicConnectionFactory 和QueueConnectionFactory JMS1.1 TopicConnectionFactory 和QueueConnectionFactory合并为ConnectionFactory --> <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>ConnectionFactory</value> </property> <property name="jndiTemplate"> <ref local="jndiTemplate"/> </property> </bean> <!-- 创建JMS的目的地信息 --> <bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>queue/longgangbai</value> </property> <property name="jndiTemplate"> <ref local="jndiTemplate"/> </property> </bean> <!-- 创建JMS发送信息的模板的对象 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory"> <ref local="connectionFactory"/> </property> <property name="defaultDestination"> <ref local="destination"/> </property> </bean> <!-- 定义消息的监听器的实现 --> <bean id="messageListener" class="com.easyway.jboss.jms.ptp.spring.service.SpringJMSMessageListener"> <property name="jmsTemplate"> <ref bean="jmsTemplate"/> </property> </bean>
package com.easyway.jboss.jms.ptp.spring.service;
import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.QueueSession; import javax.jms.Session; import javax.jms.TextMessage;
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.jms.core.JmsTemplate; /** * Spring JMS 中消息监听的事件的处理 * * @author longgangbai * */ public class SpringJMSMessageListener implements MessageListener ,InitializingBean,DisposableBean{ private static final Log log=LogFactory.getLog(SpringJMSMessageListener.class); private JmsTemplate jmsTemplate; private Connection conn; public JmsTemplate getJmsTemplate() { return jmsTemplate; }
public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; }
public Connection getConn() { return conn; }
public void setConn(Connection conn) { this.conn = conn; }
/** * 处理消息的方法 */ @Override public void onMessage(Message message) { if (message instanceof TextMessage) { try { System.out.println(((TextMessage) message).getText()); } catch (JMSException ex) { throw new RuntimeException(ex); } } else { throw new IllegalArgumentException("Message must be of type TextMessage"); } }
/** * 初始化的连接的操作 */ @Override public void afterPropertiesSet() throws Exception { ConnectionFactory conFactory=jmsTemplate.getConnectionFactory(); Destination destination=jmsTemplate.getDefaultDestination(); this.conn=conFactory.createConnection("guest", "guest"); Session session=conn.createSession(false, QueueSession.AUTO_ACKNOWLEDGE); MessageConsumer mc=session.createConsumer(destination); mc.setMessageListener(this); conn.start(); }
/** * 销毁连接的操作 */ @Override public void destroy() throws Exception { conn.close(); }
}
相关推荐
本文将深入探讨如何将IBM WebSphere MQ(简称IBM MQ)与JBoss应用程序服务器整合,并利用Spring框架来实现消息的读写。这一整合有助于提升系统的可扩展性和解耦性,使应用程序能够通过消息传递进行异步通信。 首先...
在IT行业中,Spring框架是Java开发中的重要工具,它提供了丰富的功能来简化应用程序的构建,尤其是在企业级应用中。Spring JMS(Java消息服务)模块是Spring框架的一部分,用于处理消息队列通信,这是一种异步处理和...
1. 配置 JMS 容器(如 ActiveMQ、IBM WebSphere MQ 或 JBoss MQ)。 2. 在 Spring 配置文件中定义 JmsTemplate 和消息目的地(队列或主题)。 3. 使用 JmsTemplate 的 send 方法发送消息,指定目的地和消息内容。 4....
2. **广泛的服务器支持**:支持JBoss、Geronimo等主流开源应用服务器,并且能够很好地与Spring框架集成。 3. **P2P传输层**:引入了一个新的P2P传输层,用于构建可靠的P2P JMS网络连接。 4. **丰富的基础设施服务**...
3. **Spring框架集成**:ActiveMQ与Spring框架深度结合,可以轻松地内嵌到基于Spring的应用中,并充分利用Spring 2.0的新特性,简化开发流程。 4. **广泛的J2EE服务器兼容性**:经过Geronimo、JBoss、GlassFish、...
2. **平台兼容性**:能够与JBoss、Geronimo等开源应用服务器集成,并且支持Spring框架的消息驱动。 3. **P2P传输层**:提供了可靠的P2P JMS网络连接。 4. **JMS基础设施服务**:具备消息持久化、事务处理和集群支持...
3. **与Spring框架的深度整合**:ActiveMQ可以无缝嵌入Spring框架的应用中,同时也支持Spring 2.0的特性,简化了消息服务的集成和管理。 4. **广泛的J2EE服务器兼容性**:ActiveMQ经过验证,可在Geronimo、JBoss 4...
- **Struts**: 熟悉Struts框架的工作机制和组件,能够使用Struts进行MVC模式的应用开发。 ### 三、服务器与数据库管理 #### 1. Web/Application Server - **Weblogic**: 了解Weblogic服务器的安装配置、集群部署及...
在实际应用中,开发者通常会创建一个 Spring 配置文件来设置 JMS 相关组件,然后在 Java 代码中注入这些组件,实现消息的发送和消费。例如,创建一个消息生产者可以使用 `JmsTemplate`,而消息消费者则可以通过实现 ...
- 支持多种开源应用服务器,如 JBoss、Geronimo,以及与 Spring 框架的集成,使 ActiveMQ 能够无缝融入现有的开发环境。 - 支持多种客户端语言和协议,包括 Java、C、C++、C#、Ruby、Perl、Python 和 PHP,以及 ...
Spring Boot,Camel和ActiveMQ快速入门本快速入门介绍了如何使用OpenShift将Spring-Boot应用程序连接到A-MQ xPaaS消息代理,以及如何在两条骆驼路线之间使用JMS消息传递。建造这个例子可以用mvn clean install在...
JBoss ESB是JBoss公司推出的一款ESB产品,它基于Rosetta网关,与JBoss MQ消息中间件、JBoss rules规则引擎、jBPM流程管理引擎以及JBoss WS组成了一整套强大的企业级集成解决方案。JBoss ESB专注于简化复杂系统的集成...
尽管ActiveMQ 在开源JMS提供商中脱颖而出,但仍有其他竞争对手,如JBoss的jBossMQ和jBoss Messaging,OpenJMS,以及IBM WebSphereMQ、BEA WebLogic JMS等商业产品。尽管这些产品都有各自的优点,但ActiveMQ的独立性...
ActiveMQ不仅能够无缝集成到JBoss、Geronimo等知名开源应用服务器中,还支持Spring框架的消息驱动,这意味着开发者可以在使用Spring的系统中轻松地内嵌ActiveMQ,利用其丰富的功能和高级特性。 #### P2P传输层创新 ...
此快速入门展示了如何将Spring-Boot应用程序连接到A-MQ xPaaS消息代理,以及如何使用OpenShift在两条骆驼路线之间使用JMS消息传递。 建筑 这个例子可以用 mvn clean install 在OpenShift中运行示例 假定: ...
JBOSS tomcat resin jetty 容灾 日志框架 开源框架 slf4j 框架实现 log4j logback commong logging jdk logger 测试框架 测试框架 junit easymock testng mockito bug管理 禅道 jira 开发...
15. **应用服务**:独立组件、工具箱和引擎,如EJB(Enterprise JavaBeans)、jbpm(业务流程管理)、Lucene(全文搜索引擎)、MQ(消息队列)、Spring框架等,提供业务逻辑的支持。 16. **中间件和容器**:如...