OPENJMS学习笔记一

12 篇文章 0 订阅
2 篇文章 0 订阅

环境:OPENJMS0.7.7     mysql5.1

一,首先下载openjms的server包:

下载地址:http://prdownloads.sourceforge.net/openjms/openjms-0.7.7-beta-1.zip

二,下载mysql5.1

下载地址:http://dev.mysql.com/downloads/mysql/5.1.html

 

三,配置openjms的env。具体可参看官网:

http://openjms.sourceforge.net/adminguide/install.html

 

1,首先配置openjms的home变量:

set OPENJMS_HOME = openjms-0.7.7-beta-1.zip的解压目录

2,安装mysql5.1

3,命令行登录mysql,创建数据库opejms

  create database openjms;

  初始化数据库表:

  use openjms;

 source %OPENJMS_HOME%/db/sql/create_mysql.sql

 

4,下载mysql的jdbc驱动mysql-connector-java-5.1.*-bin.jar

 http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.10.zip/from/pick

 

5,将mysql驱动放入openjms的lib目录或是修改%OPENJMS_HOME%/bin/setenv.bat

rem Configure the JDBC driver rem set CLASSPATH=F:/classpath/mysql/mysql-connector-java-5.1.8-bin.jar

 

配置openjms的数据库配置:config/openjms.xml

 

修改如下:

<DatabaseConfiguration> <RdbmsDatabaseConfiguration driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/jms" user="username" password="password"/> </DatabaseConfiguration>

 

到此openjms就可以正常运行了

 

四,启动openjm

 启动OPENJMS使用bin目录下的admin.bat

启动出图形界面后点击Action--Start OpenJMS

如果启动异常的话 bin/openjms.log查看详细信息。

启动完成后看到

 

 

启动图形化监控界面Action - Connection  - Online

默认的用户名密码为:admin/openjms  (config/openjms.xml中配置)

好现在示例程序已经创建了3个消息队列(点对点消息)一个广播(topic)

执行examples/basic/build.bat编译示例程序

运行examples/basic/Sender.java

参数一代表queuename 参数二代表发送的消息条数 我们先给queue1发送20条信息

执行run.bat Sender

执行成功后在看图形监控界面如下:

 

当前queue1 队列中的消息条数已经是20条了

 

运行Receiver类 来接收5条信息

 

运行成功后发现监控界面中queue1中的消息已经只有15条了。留着下次登录在取吧:)

 

这样就完成了我们点对点通信的测试了 很简单吧 在看示例代码同样的很简单

 

我看了代码没有看到广播发送消息的类 只有接收消息的类 于是乎还是自己写一个吧

 

import javax.jms.JMSException;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/*
 *author:a276202460
 *Create Date:2009-11-26
 *
 */

public class TopicPublish {
 
  public static void main(String[] s){
	  Context context = null;
	  TopicConnectionFactory factory = null;
	  TopicConnection conn = null;
	  String factoryname = "ConnectionFactory";
	  String topicname = "topic1";
	  Topic topic = null;
	  TopicPublisher topicpublisher = null;
	 
	  int count = 10;
	  String message = "publishmessage";
	  TopicSession session = null;
	  try{
		  context = new InitialContext();
		  factory = (TopicConnectionFactory)context.lookup(factoryname);
		  topic = (Topic)context.lookup(topicname);
		  conn = factory.createTopicConnection();
		  session = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
		  topicpublisher = session.createPublisher(topic);
		  for(int i = 0 ;i < count;i++){
			  TextMessage tmessage = session.createTextMessage();
			  tmessage.setText(message+i);
			  topicpublisher.publish(tmessage);
			  System.out.println(tmessage.getText());
		  }
	  } catch (NamingException e) {
		 e.printStackTrace();
	} catch (JMSException e) {
	     e.printStackTrace();
	}finally{
		
		try {
			session.close();
		} catch (JMSException e) {
			 
			e.printStackTrace();
		}
		
		try {
			conn.close();
		} catch (JMSException e) {
			 
			e.printStackTrace();
		}
		  try {
			context.close();
		} catch (NamingException e) {
			 
			e.printStackTrace();
		}
	  }
  }
  
  
  
}

 

完成后运行TopicPublish类 发送10条广播信息,当前广播接收节点中只有sub1和sub2两个成员,两个成员均可接收发送的这10条广播信息

 

运行DurableSubscriber类 看看效果吧:

 

注意此类源代码中的节点定义:

 String subscriptionName = "rubADubSub";

 

这里应该改为sub1或是sub2 或是直接在图形界面添加一个节点名字命名为rubADubSub 当然一定要在topic1下。

 

我在源代码中改成了sub1,重新执行build.bat编译class 运行结果如下:

 

 

 

 

当然发送和接收的类运行关系可以反过来,以你为示例代码中接收消息用的是reveive如果当前队列中没有消息会一直等待。

可以改成receiveNoWait试试。

 

 

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值