jms基本用法

           下面具体来介绍服务器搭建,在http://openjms.sourceforge.net/downloads.html下载openJms,解压后在系统环境变量中加入OPENJMS_HOME=安装路径,在 \openjms-0.7.6.1\bin 里,有openJms的运行脚本,执行 startup 启动,弹出一个新的窗口,服务就运行在新窗口内,shutdown 为停止命令;下面写段JMS的测试代码:

import java.util.*;
import javax.jms.*;
import javax.naming.*;
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/");//在jms 服务器安装目录下config/openjms.xml中这个值可以根据需求修改
            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();
        }
    }
}

  以上是把我们新建的消息“Hello, I'm openJms” 发送到 jms服务器中queue1中,我们可以运行jms服务器bin下的admin.bat查看我们queue1中的消息数目1;

  下面我们可以或取jms服务器中我们刚才发送的消息代码如下:

   

import java.util.*;
import javax.jms.*;
import javax.naming.*;
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();
        }
    }
}

  以上的代码可以把我们刚才发送到JMS服务上的消息“Hello, I'm openJms”取出来;以上两个java类不需要新建WEB工程直接新建JAVA工程就可以,需要加入额外的包:

     commons-logging-1.0.4.jar

     excalibur-util-concurrent-1.3.1.jar

     jms-1.1.jar

     openjms-0.7.7-beta-1.jar

     openjms-common-0.7.7-beta-1.jar

     openjms-net-0.7.7-beta-1.jar

     openjms-tools-0.7.7-beta-1.jar

     spice-jndikit-1.2.jar

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值