读书人

weblogic+jms的简略使用

发布时间: 2012-09-22 21:54:54 作者: rapoo

weblogic+jms的简单使用

Java消息服务(JMS)是用于编写使用异步消息传递的JEE应用程序的API。JMS的创建过程类似于Hibernate的工厂模式。JMS支持两种消息类型:点对点(PTP)和发布/订阅式(pub/sub)。PTP消息被生产者放入到一个队列中,消费者则从消息队列中取走消息。消息一旦被一个消息者取走,消息就从队列中移除,这意味着即使有多个消费者观察一个队列,但一条消息只能被一个消费者取走。PUB/SUB消息则需要先注册,然后消息异步发送到订阅者,可以有多个订阅者。

实现所包括的步骤:

    创建JNDI初始上下文(context)。从JNDI上下文获取一个队列连接工厂。从队列连接工厂中获取一个Quene。创建一个Session对象。创建一个发送者(sender)或接收者(receiver)对象。使用步骤5创建的发送者或接收者对象发送或接收消息。处理完消息后,关闭所有JMS资源。

安装完成Weblogic9.2后,启动服务进入控制台,weblogic+jms的简略使用>examples-jms

修改JNDI名称为myqueue,mytopic这样在之后的初始化过程中,我们就可以通过名称查找创建连接工厂

服务端代码如下:

?

package www.lring.net;import java.util.Hashtable;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.jms.TextMessage;import javax.naming.Context;import javax.naming.InitialContext;public class Test {public static void main(String[] args){try{// TODO Auto-generated method stubHashtable<String,String> table = new Hashtable<String,String>();table.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");table.put(Context.PROVIDER_URL, "t3://localhost:7001");Context cxt = new InitialContext(table);//获得可以进行点对点操作的消息连接工厂,连接工厂一定要先设置好QueueConnectionFactory factory = (QueueConnectionFactory)cxt.lookup("weblogic.examples.jms.QueueConnectionFactory");//获得连接,获得了可以使用消息服务的权利QueueConnection conn = factory.createQueueConnection();//获得一个队列对象Queue q = (Queue) cxt.lookup("myqueue");//从连接工厂中获得一个连接,用这个连接去连接要暂存消息的队列//获得一次消息发送的会话对象QueueSession session = conn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);//建立消息的发送对象QueueSender sender = session.createSender(q);//我要发送的消息内容封装到一个message的实现者中。TextMessage message = (TextMessage) session.createTextMessage();//写入消息message.setText("邢海峰hello world......");//发送消息sender.send(message);sender.close();session.close();conn.close();cxt.close();//TopicConnectionFactory topicfactory = (TopicConnectionFactory) cxt.lookup("weblogic.examples.jms.TopicConnectionFactory");}catch(Exception e ){e.printStackTrace() ;}}}

?

客户端代码如下:

package www.lring.net;import java.util.Hashtable;import javax.jms.Queue;import javax.jms.QueueConnection;import javax.jms.QueueConnectionFactory;import javax.jms.QueueReceiver;import javax.jms.QueueSession;import javax.jms.TextMessage;import javax.naming.Context;import javax.naming.InitialContext;public class GetMessage {public GetMessage() {// TODO Auto-generated constructor stub}/** * @param args */public static void main(String[] args) throws Exception{// TODO Auto-generated method stubHashtable<String,String> table = new Hashtable<String,String>();table.put(Context.INITIAL_CONTEXT_FACTORY, weblogic.jndi.WLInitialContextFactory.class.getName());table.put(Context.PROVIDER_URL, "t3://localhost:7001");Context context = new InitialContext(table);QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("weblogic.examples.jms.QueueConnectionFactory");Queue q = (Queue) context.lookup("myqueue");QueueConnection conn = factory.createQueueConnection();//session.setMessageListener(arg0);//消息的提取本身是异步的QueueSession session = conn.createQueueSession(false, 0);//获得一个消息的接受者//获得消息,消费消息conn.start();QueueReceiver receiver = session.createReceiver(q);//receiver.setMessageListener(new MyLinener());//while(true)//{//Thread.sleep(1000);//System.out.println("..............");//}TextMessage message = (TextMessage) receiver.receive();System.out.println(message.getText());conn.close();}}

?

?

?

?

?

?

读书人网 >Web前端

热点推荐