1 在Weblogic中配置JMS服务 由于weblogic‘图形界面配置jms过程比较简单,下面值给出配置的简要过程和结果。(1)新建jms连接工厂,工厂名称为“ ConnectionFactory”, JNDI name为"jmsfactory" 。(2)定义后备存储, 并填写存储目录.(3)新建jms服务器,服务器名称为:“ jmsserver ”。(4)在“ myJMSServer ”服务下新建目标为“ queue ”队列, JNDI name为"jmstest"。2 在Eclipse中编写消息发送端的代码,工程目录如下:如果jdk中没有jms相关jar包,请一定记得导入javax.jms.jar和weblogic.jar包
发送消息端的代码如下:
package com.wnq.send;
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class JmsSend {
public static void main(String[] args) throws NamingException, JMSException {
String url = "t3://127.0.0.1:7001";
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, url);
Context context = new InitialContext(properties);
// 获得JMS信息连接队列工厂
QueueConnectionFactory connFactory = (QueueConnectionFactory) context.lookup("jmsfactory");
// 获得JMS信息连接队列
QueueConnection queConn = connFactory.createQueueConnection();
// 产生队列session,设置事物模式为false,自动应答消息接收
QueueSession queSession = queConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
// 获得队列
javax.jms.Queue queue = (javax.jms.Queue) context.lookup("jmstest");
// 产生JMS队列发送器
QueueSender queSender = queSession.createSender(queue);
// 产生JMS消息
Message msg = queSession.createTextMessage("Hello,我是来自客户端JmsSender的消息!");
System.out.print("发送的消息为:" + msg.toString());
// 发送数据到JMS
queSender.send(msg);
System.out.println("发送成功");
// 关闭操作
queSender.close();
queSession.close();
queConn.close();
}
}
3 发送消息
运行所建工程其中eclipse控制台结果为:
weblogic管理台结果:
消息总数不为1,是因为之前做测试,发送了一些消息。
4 Eclipse中编写消息接受端代码
工程目录结构为:
接受消息代码:
package com.wnq.receive;
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class JmsReceive {
public static void main(String[] args) throws NamingException, JMSException {
String url = "t3://127.0.0.1:7001";
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, url);
Context context = new InitialContext(properties);
//获得JMS信息连接队列工厂
QueueConnectionFactory connFactory = (QueueConnectionFactory) context.lookup("jmsfactory");
//获得JMS信息连接队列
QueueConnection queConn = connFactory.createQueueConnection();
//产生队列session,设置事物模式为false,自动应答消息接收
QueueSession queSession = queConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queConn.start();
//获得队列
Queue queue = (Queue) context.lookup("jmstest");
QueueReceiver queReceiver = queSession.createReceiver(queue);
System.out.println("***************");
queReceiver = queSession.createReceiver(queue);
TextMessage msg = (TextMessage) queReceiver.receive();
System.out.println("JmsReceive收到的消息是:" + msg.getText());
}
}
5 接受消息
运行接受端代码Eclipse中结果为:
weblogic管理台的结果为:
由于之前做过一些发送和接受的操作,所以消息总数与最大使用者可能不匹配。
6 p2p消息
这种消息队列可以同时有多个发送者,每个发送着都可以自由的向队列中发送消息,被发送的消息按照先发先进的原则一次排列在队列中,先发的消息排列在队列的前面,排列在队列中的消息可以立即被使用者使用,也可以等一段时间才被使用者使用!通常有队列服务器维持消息的持久化。默认情况按照在队列中次序一次使用,一旦一个消息被使用,该消息就会被从队列中删除,此后下一个消息才会被使用