⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asyncmessageconsumer.java

📁 java的一系列产品中包括jsme,jmse,j2ee,本文件提供j2ee实现的源代码.
💻 JAVA
字号:
/*异步消息接收程序,从主题接收*/
package topic;

import java.util.Properties;
import javax.rmi.PortableRemoteObject;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;


public final class AsyncMessageConsumer implements MessageListener
{
  private static TopicSubscriber subscriber;
  private static TextMessage msg;
  
  private static int EXPECTED_MESSAGE_COUNT = 2;
  private static int messageCount = 0;  
  private static final String url  = "t3://localhost:7001";
  
  public static void main(String [] argv) throws Exception
  {
    int MAX_TRIES = 3;
    int tryCount = 0;
    
    try{
     	//设置初始上下文
      Properties env = new Properties();
      env.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
      env.put(Context.PROVIDER_URL, url);
      
    	//获取初始上下文      
    	Context ctx = new InitialContext(env);    	
    	
    	//1:通过JDNI查找ConnectionFactory
    	TopicConnectionFactory tConFactory = (TopicConnectionFactory)
      	ctx.lookup("weblogic.jms.ConnectionFactory"); 
      
    	//2:用ConnectionFactory建立JMS连接
    	TopicConnection tCon = tConFactory.createTopicConnection();   
      
      //3:用Connection创建会话
    	TopicSession session = tCon.createTopicSession(
      	false, /* not a transacted session */
      	Session.AUTO_ACKNOWLEDGE 
    	);
    	
    	//4:通过JDNI查找目的(消息队列)
    	Topic messageTopic = (Topic) ctx.lookup("MessageTopic"); 
      
      //5:创建消息接收者,并使用setMessageListener()方法传递一个实现了
      //MessageListener接口的对象
    	subscriber = session.createSubscriber(messageTopic);
    	subscriber.setMessageListener(new AsyncMessageConsumer());
    	
    	//异步消息接收者:start()方法调用onMessage()接收消息
    	tCon.start();
      
      //为避免主线程在消息到达之前退出,执行以下循环
      //while(true) {
    	while(expectMoreMessages()&&(tryCount<MAX_TRIES)){
      	try {
        	Thread.sleep(1000);
      	} catch (InterruptedException ignore){}
      	tryCount++;
    	}
    }catch(JMSException e) {
      e.printStackTrace();
    }
  }
  
  public static boolean expectMoreMessages(){ 
    return messageCount < EXPECTED_MESSAGE_COUNT;
  }

  public void onMessage(Message m){
    try {
      TextMessage msg = (TextMessage) m;
      System.out.println("Received: "+msg.getText());
    }catch (JMSException e){
      e.printStackTrace();
    } 
    messageCount++;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -