openJms服务器实例入门

本文简单介绍开源的JMS服务器openJms的用法。 openJms符合SUNJMS API 1.0.2规范,支持消息队列,还支持消息传递的发布/订阅模式,本文先就系统服务的搭建及JMS的非结构化消息发送和接收进行说明。

JMS 有五种消息类型。三种结构化或半结构化的消息类型(MapMessageObjectMessage StreamMessage)以及两种非结构化的或自由格式的消息类型(TextMessage BytesMessage)。而这里虽然我们只对非结构化消息进行说明。

下面介绍如何使用openJms。下载openJms,解压后可以直接使用,在 /openjms-0.7.6.1/bin 里,有openJms的运行脚本,执行 startup 启动,弹出一个新的窗口,服务就运行在新窗口内,shutdown 为停止命令。

服务运行后,就可以开始使用JMS服务了,很简单吧。

Eclipse建立相关project。将需要的jaropenjms-0.7.6.1.jarjms-1.0.2a.jarexolabcore-0.3.7.jarcommons-logging-1.0.3.jar加入到工程目录,可在/openjms-0.7.6.1/lib里可以找到这些jar

 

下面是消息发送服务的代码QueueSend.java

package com.peng.openjms;

 

import java.util.*;

import javax.jms.*;

import javax.jms.Queue;

import javax.naming.*;

 

public class QueueSend {

          public static void main(String[] args) throws NamingException, JMSException {

                    Hashtable<String, String> prop = new Hashtable<String, String>();

                    prop.put(Context.INITIAL_CONTEXT_FACTORY,

                                        "org.exolab.jms.jndi.InitialContextFactory");

                    prop.put(Context.PROVIDER_URL, "rmi://localhost:1099/");

                    Context context = new InitialContext(prop);

                    QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("JmsQueueConnectionFactory");

                    QueueConnection conn = factory.createQueueConnection();

                    QueueSession session = conn.createQueueSession(false,

                                        Session.AUTO_ACKNOWLEDGE);

                    Queue queue = (Queue) context.lookup("queue1");

                    QueueSender queueSender = session.createSender(queue);

                    TextMessage message = session.createTextMessage();

                    message.setText("Hello, I'm openJms.");

                    queueSender.send(message);

                    System.out.println("info in jms queue ");

          }

}

执行程序发送消息,然后打开JMS控制台(在openJms解压目录下/bin里面有个admin.bat),用 admin 命令启动管理平台,点击菜单Actions-Start openJMS启动Jms服务器。然后,点击菜单ActionsConnectionsonline:可以看到JSM默认的队列queue1里已经有1条消息了,而其他的队列还是空着的。(消息是执行QueueSend.java程序产生的)

 

下面我们来看看消息接收服务的代码QueueReceiveSynchronous.java

package com.peng.openjms;

 

import java.util.*;

import javax.jms.*;

import javax.jms.Queue;

import javax.naming.*;

 

public class QueueReceiveSynchronous {

          public static void main(String[] args) throws NamingException, JMSException {

                    Hashtable<String, String> prop = new Hashtable<String, String>();

                    prop.put(Context.INITIAL_CONTEXT_FACTORY,

                                        "org.exolab.jms.jndi.InitialContextFactory");

                    prop.put(Context.PROVIDER_URL, "rmi://localhost:1099/");

                    Context context = new InitialContext(prop);

                    QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("JmsQueueConnectionFactory");

                    QueueConnection conn = factory.createQueueConnection();

                    conn.start();

                    QueueSession session = conn.createQueueSession(false,

                                        Session.AUTO_ACKNOWLEDGE);

 

                    Queue queue = (Queue) context.lookup("queue1");

                    QueueReceiver receiver = session.createReceiver(queue);

                    Message message = receiver.receive();

                    String messageText = null;

                    if (message instanceof TextMessage)

                              messageText = ((TextMessage) message).getText();

                    System.out.println(messageText);

          }

}

编译后运行接收信息服务,可以看到接收到并打印之前发送的消息,再看看admin控制台,发现queue1的消息队列变为0,消息已被读取,消息发送和接收到此结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值