`

开源JMS服务器-openJms 介绍(一)

阅读更多
本文介绍开源的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

    **开源JMS服务器-openJMS** ...总结,openJMS是一个强大的开源JMS服务器,提供了可靠的消息传递解决方案。通过理解和利用openJMS,开发者可以构建出高效、可扩展的分布式系统,并利用其丰富的特性来解决实际问题。

    openjms-0.7.7-beta-1

    "openjms-0.7.7-beta-1" 是一个软件版本标识,其中 "openjms" 是一个开源的Java消息服务(Java Message Service,简称JMS)实现,版本号为0.7.7,标记为beta-1,表示这是一个测试阶段的版本,可能含有未修复的bug或...

    openjms-0.7.7-beta-1-src

    OpenJMS,全称为Open Java Message Service,是一个开源的Java消息服务实现,它提供了符合JMS(Java Message Service)规范的消息传递功能。OpenJMS 0.7.7-Beta-1是该项目的一个早期版本,尽管它可能不包含最新特性...

    JMS OPENJMS的实现例子

    OPENJMS是JMS的一个开源实现,提供了一个轻量级的消息中间件,使得开发者可以方便地在Java应用程序之间实现消息交换。 JMS的核心概念包括生产者(Producer)、消费者(Consumer)、队列(Queue)和主题(Topic)。...

    JMS初级认识,用的是Openjms中间件

    OpenJMS是一个开源的JMS实现,它提供了完整的JMS 1.1规范支持。作为一个轻量级的消息传递服务器,OpenJMS适用于小型到大型的企业级应用,具有良好的可扩展性和稳定性。 **JMS核心概念:** 1. **消息(Message)**:...

    openjms服务器

    OpenJMS服务器是一款开源的消息中间件,主要用于Java消息服务(JMS)的实现。它提供了一个可靠的、可扩展的平台,使得应用程序能够通过消息传递进行通信,从而实现解耦和异步处理。JMS是Java平台上的一种标准接口,...

    开源的JMS服务器和源码

    OpenJMS是一个开源的Java Message Service API 1.0.2 规范的实现,它包含有以下特性: *. 它既支持点到点(point-to-point)(PTP)模型和发布/订阅(Pub/Sub)模型。 *. 支持同步与异步消息发送 *. JDBC持久性...

    应用openJMS实现JMS消息发布于订阅

    在提供的压缩包文件`openjms-0.7.7-beta-1`中,包含了OpenJMS的库和配置文件。根据官方文档配置OpenJMS服务器,通常需要修改`conf/openjms.xml`配置文件,设置服务器端口、连接工厂等参数。 2. **创建主题(Topic)...

    OpenJMS简介

    OpenJMS是一个开源的消息传递系统,它实现了Java消息服务(JMS)规范,为企业级应用程序提供可靠的异步通信。在本文中,我们将深入探讨OpenJMS的特性、工作原理以及如何在实际应用中利用它。 首先,让我们了解什么...

    Openjms.rar_OpenJMS

    OpenJMS是一个开源的消息中间件(Message Oriented Middleware, MOM),它实现了Java消息服务(Java Message Service, JMS)规范,允许应用程序通过异步发送和接收消息进行通信。在Java开发环境中,OpenJMS提供了...

    jms.rar_jar j_java jms_jms_jms jar_jms.j

    `openjms-0.7.7-beta-1`则是OpenJMS的一个早期版本,OpenJMS是一个开源的JMS实现,提供了消息中间件的功能,用于处理和传递消息。 现在,我们详细讨论一下JMS的核心概念和应用场景: 1. **消息队列**:JMS通过消息...

    openJMS Jar

    本文将围绕"openJMS Jar"这一主题,深入探讨openJMS的核心功能、安装与配置,以及如何在实际项目中使用openjms-0.7.7-beta-1版本进行资源开发。 一、openJMS概述 openJMS是一个完全符合JMS 1.1规范的开源消息...

    JMS入门

    【JMS入门】这篇文章主要介绍了Java消息服务(Java Message Service,简称JMS)的基本概念和如何使用开源的JMS服务器OpenJMS进行实践操作。JMS是一种标准接口,用于应用程序之间的异步通信,特别是在分布式环境中,...

    OPENJMS操作消息传输示例

    OPENJMS是其中一个开源的JMS实现,它提供了轻量级的消息中间件,支持多种协议和传输方式。本示例将深入探讨如何使用OPENJMS进行消息传输,并通过`JmsTest`这个实例文件来展示具体操作。 首先,我们需要理解JMS的...

    J2EE学习中一些值得研究的开源项目

    - **简介**:由Apache基金会提供的一款免费开源的Web服务器软件,支持最新的Servlet、JSP规范。 - **特点**: - 高度可配置; - 支持多种部署方式; - 有活跃的社区支持,文档丰富; - 提供了强大的管理工具; -...

    解析Tomcat下应用JMS开发技巧

    最后,需要将JMS服务器与Web服务器集成,首先需要配置应用的web.xml文件,添加context-param和listener元素,以便 aktivemq.xml文件的配置。 在web.xml文件中,需要添加以下代码: <context-param> <param-name>...

    JMS开发例子.pdf

    在本例子中,我们将关注如何使用OpenJMS这一开源JMS实现来搭建服务器并进行消息的发送和接收。首先,你需要从官方网站下载最新版本的OpenJMS,解压缩后在bin目录下运行startup.bat启动服务。这会开启一个新窗口,...

    ActiveMQ教程+配置借鉴.pdf

    Apache ActiveMQ 是一款基于 Apache 2.0 许可证的开源消息中间件,它是一个实现了 JMS(Java Message Service)1.1 和 J2EE 1.4 规范的 JMS 提供商。这款中间件在 IT 领域中广泛应用,因为它具有高度的灵活性、稳定...

Global site tag (gtag.js) - Google Analytics