因为项目要用到点对点传输和订阅发布模式,了解了这样两个协议之后,又找到了支持这两种方式的一个开源框架openjms,准备试试看。
以下是运行jms的几个步骤。至于下载安装就自不必说了。
1. 打开命令行切换到jms主目录下的bin文件夹下,执行startup 脚本
2. 执行以下的发送和接受代码就可以工作了(先启动接收端)
JmsSender .java
package test.net.openjms; import java.util.Hashtable; import javax.jms.*; import javax.naming.*; public class JmsSender { public void send() { Hashtable<String, String> pps = new Hashtable<String, String>(); pps.put(Context.INITIAL_CONTEXT_FACTORY, "org.exolab.jms.jndi.InitialContextFactory"); pps.put(Context.PROVIDER_URL, "tcp://localhost:3035"); try { Context ctx = new InitialContext(pps); ConnectionFactory fac = (ConnectionFactory) ctx.lookup("ConnectionFactory"); Connection con = fac.createConnection(); Session ses = con.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination dist = (Destination) ctx.lookup("topic1"); con.start(); MessageProducer sender = ses.createProducer(dist); int i= 0; for (i = 0; i < 10; i++) { TextMessage msg = ses.createTextMessage(i + ". HEllo world!"); sender.send(msg); System.out.println("Msg sent."); } } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { new JmsSender().send(); System.out.println("Sender DONE."); } }
//JmsReceiver.java
package test.net.openjms; import java.util.Hashtable; import javax.jms.*; import javax.naming.*; public class JmsReceiver { public void receive() { Hashtable<String, String> pps = new Hashtable<String, String>(); pps.put(Context.INITIAL_CONTEXT_FACTORY, "org.exolab.jms.jndi.InitialContextFactory"); pps.put(Context.PROVIDER_URL, "tcp://localhost:3035"); try { Context ctx = new InitialContext(pps); ConnectionFactory fac = (ConnectionFactory) ctx.lookup("ConnectionFactory"); Connection con = fac.createConnection(); Session ses = con.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination dist = (Destination) ctx.lookup("topic1"); MessageConsumer receiver = ses.createConsumer(dist); con.start(); for (int i = 0; i < 10; i++) { TextMessage tmsg = (TextMessage) receiver.receive(); System.out.println("Receive Msg: " + tmsg.getText()); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { new JmsReceiver().receive(); System.out.println("Receive DONE"); } }