本文介绍开源的JMS服务器openJms,及怎样使用openJms来构建系统之间健全、高度可用的通讯,从而简化企业级应用的开发。 openJms符合SUN的JMS API 1.0.2规范,支持消息队列,还支持消息传递的发布/订阅模式,本文先就系统服务的搭建及JMS的非结构化消息发送和接收进行说明。
JMS 有五种消息类型。三种结构化或半结构化的消息类型(MapMessage、ObjectMessage 和 StreamMessage)以及两种非结构化的或自由格式的消息类型(TextMessage 和 BytesMessage)。而这里虽然我们只对非结构化消息进行说明,但非结构化的消息格式却能够更好地进行交互操作,因为它们在消息上很少利用结构,在此基础上与XML再进行结合,将能方便的进行更好的扩展,XML相关简化操作参考《Jaxb来实现Java-XML的转换》。
下面具体来介绍服务器搭建,在http://openjms.sourceforge.net/downloads.html下载openJms,解压后可以直接使用,在 \openjms-0.7.6.1\bin 里,有openJms的运行脚本,执行 startup 启动,弹出一个新的窗口,服务就运行在新窗口内,shutdown 为停止命令:
服务运行后,就可以开始使用JMS服务了,至此服务搭建完毕,简单得不能再简单了。
下面是消息发送和接收的开发,开发中需要的jar包在\openjms-0.7.6.1\lib里可以找到:
openjms-0.7.6.1.jar
jms-1.0.2a.jar
exolabcore-0.3.7.jar
commons-logging-1.0.3.jar
把上面的类包加入到项目中,下面是消息发送服务的代码:
package javayou.demo.openjms;
import java.util.*;
import javax.jms.*;
import javax.naming.*;
/**
* @author Liang.xf 2004-12-24
* For openJms 演示, Message 发送
* www.javayou.com
*/
public class QueueSend {
public static void main(String[] args) {
try {
//取得JNDI上下文和连接
Hashtable properties = new Hashtable();
properties.put(
Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
//openJms默认的端口是1099
properties.put(Context.PROVIDER_URL,
"rmi://localhost:1099/");
Context context = new InitialContext(properties);
//获得JMS信息连接队列工厂
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) context.lookup(
"JmsQueueConnectionFactory");
//获得JMS信息连接队列
QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
//产生队列Session,设置事务为false,自动应答消息接收
QueueSession queueSession =
queueConnection.createQueueSession(
false,
Session.AUTO_ACKNOWLEDGE);
//获得默认内建在JMS里的队列之一:queue1
Queue queue = (Queue) context.lookup("queue1");
//产生JMS队列发送器
QueueSender queueSender =
queueSession.createSender(queue);
//发送数据到JMS
TextMessage message = queueSession.createTextMessage();
message.setText("Hello, I'm openJms.");
queueSender.send(message);
System.out.println(
""信息写入JMS服务器队列");
//以下做清除工作,代码略
// ... ...
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行程序发送消息,然后打开JMS控制台,用 admin 命令启动管理平台,点击菜单Actions-Connections-online,出现界面如下:
可以看到JSM默认的队列queue1里已经有1条消息了,而其他的队列还是空着的。
下面我们来看看消息接收服务的代码:
package javayou.demo.openjms;
import java.util.*;
import javax.jms.*;
import javax.naming.*;
/**
* @author Liang.xf 2004-12-24
* For openJms 演示, Message接收
* www.javayou.com
*/
public class QueueReceiveSynchronous {
public static void main(String[] args) {
try {
//取得JNDI上下文和连接
Hashtable properties = new Hashtable();
properties.put(
Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL,
"rmi://localhost:1099/");
Context context = new InitialContext(properties);
//获得JMS信息连接队列工厂
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) context.lookup(
"JmsQueueConnectionFactory");
//获得JMS信息连接队列
QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
//启动接收队列线程
queueConnection.start();
//产生队列Session,设置事务为false,自动应答消息接收
QueueSession queueSession =
queueConnection.createQueueSession(
false,
Session.AUTO_ACKNOWLEDGE);
//获得默认内建在JMS里的队列之一:queue1
Queue queue = (Queue) context.lookup("queue1");
//产生JMS队列接收器
QueueReceiver queueReceiver =
queueSession.createReceiver(queue);
//通过同步的方法接收消息
Message message = queueReceiver.receive();
String messageText = null;
if (message instanceof TextMessage)
messageText = ((TextMessage) message).
getText();
System.out.println(messageText);
//以下做清除工作,代码略
// ... ...
} catch (Exception e) {
e.printStackTrace();
}
}
}
编译后运行接收信息服务,可以看到接收到并打印之前发送的消息,再看看控制台,发现queue1的消息队列变为0,消息已被读取,消息发送和接收到此结束。
下一篇再继续讲述另外的内容:openJms的消息发布和定购。
分享到:
相关推荐
**开源JMS服务器-openJMS** ...总结,openJMS是一个强大的开源JMS服务器,提供了可靠的消息传递解决方案。通过理解和利用openJMS,开发者可以构建出高效、可扩展的分布式系统,并利用其丰富的特性来解决实际问题。
"openjms-0.7.7-beta-1" 是一个软件版本标识,其中 "openjms" 是一个开源的Java消息服务(Java Message Service,简称JMS)实现,版本号为0.7.7,标记为beta-1,表示这是一个测试阶段的版本,可能含有未修复的bug或...
OpenJMS,全称为Open Java Message Service,是一个开源的Java消息服务实现,它提供了符合JMS(Java Message Service)规范的消息传递功能。OpenJMS 0.7.7-Beta-1是该项目的一个早期版本,尽管它可能不包含最新特性...
OPENJMS是JMS的一个开源实现,提供了一个轻量级的消息中间件,使得开发者可以方便地在Java应用程序之间实现消息交换。 JMS的核心概念包括生产者(Producer)、消费者(Consumer)、队列(Queue)和主题(Topic)。...
OpenJMS是一个开源的JMS实现,它提供了完整的JMS 1.1规范支持。作为一个轻量级的消息传递服务器,OpenJMS适用于小型到大型的企业级应用,具有良好的可扩展性和稳定性。 **JMS核心概念:** 1. **消息(Message)**:...
OpenJMS服务器是一款开源的消息中间件,主要用于Java消息服务(JMS)的实现。它提供了一个可靠的、可扩展的平台,使得应用程序能够通过消息传递进行通信,从而实现解耦和异步处理。JMS是Java平台上的一种标准接口,...
OpenJMS是一个开源的Java Message Service API 1.0.2 规范的实现,它包含有以下特性: *. 它既支持点到点(point-to-point)(PTP)模型和发布/订阅(Pub/Sub)模型。 *. 支持同步与异步消息发送 *. JDBC持久性...
在提供的压缩包文件`openjms-0.7.7-beta-1`中,包含了OpenJMS的库和配置文件。根据官方文档配置OpenJMS服务器,通常需要修改`conf/openjms.xml`配置文件,设置服务器端口、连接工厂等参数。 2. **创建主题(Topic)...
OpenJMS是一个开源的消息传递系统,它实现了Java消息服务(JMS)规范,为企业级应用程序提供可靠的异步通信。在本文中,我们将深入探讨OpenJMS的特性、工作原理以及如何在实际应用中利用它。 首先,让我们了解什么...
OpenJMS是一个开源的消息中间件(Message Oriented Middleware, MOM),它实现了Java消息服务(Java Message Service, JMS)规范,允许应用程序通过异步发送和接收消息进行通信。在Java开发环境中,OpenJMS提供了...
`openjms-0.7.7-beta-1`则是OpenJMS的一个早期版本,OpenJMS是一个开源的JMS实现,提供了消息中间件的功能,用于处理和传递消息。 现在,我们详细讨论一下JMS的核心概念和应用场景: 1. **消息队列**:JMS通过消息...
本文将围绕"openJMS Jar"这一主题,深入探讨openJMS的核心功能、安装与配置,以及如何在实际项目中使用openjms-0.7.7-beta-1版本进行资源开发。 一、openJMS概述 openJMS是一个完全符合JMS 1.1规范的开源消息...
【JMS入门】这篇文章主要介绍了Java消息服务(Java Message Service,简称JMS)的基本概念和如何使用开源的JMS服务器OpenJMS进行实践操作。JMS是一种标准接口,用于应用程序之间的异步通信,特别是在分布式环境中,...
OPENJMS是其中一个开源的JMS实现,它提供了轻量级的消息中间件,支持多种协议和传输方式。本示例将深入探讨如何使用OPENJMS进行消息传输,并通过`JmsTest`这个实例文件来展示具体操作。 首先,我们需要理解JMS的...
- **简介**:由Apache基金会提供的一款免费开源的Web服务器软件,支持最新的Servlet、JSP规范。 - **特点**: - 高度可配置; - 支持多种部署方式; - 有活跃的社区支持,文档丰富; - 提供了强大的管理工具; -...
最后,需要将JMS服务器与Web服务器集成,首先需要配置应用的web.xml文件,添加context-param和listener元素,以便 aktivemq.xml文件的配置。 在web.xml文件中,需要添加以下代码: <context-param> <param-name>...
在本例子中,我们将关注如何使用OpenJMS这一开源JMS实现来搭建服务器并进行消息的发送和接收。首先,你需要从官方网站下载最新版本的OpenJMS,解压缩后在bin目录下运行startup.bat启动服务。这会开启一个新窗口,...
Apache ActiveMQ 是一款基于 Apache 2.0 许可证的开源消息中间件,它是一个实现了 JMS(Java Message Service)1.1 和 J2EE 1.4 规范的 JMS 提供商。这款中间件在 IT 领域中广泛应用,因为它具有高度的灵活性、稳定...