WEB开发网
开发学院软件开发Java 如何获取消息?使用 JMS 技术作为数据复制的解决方... 阅读

如何获取消息?使用 JMS 技术作为数据复制的解决方案

 2009-11-06 00:00:00 来源:WEB开发网   
核心提示: 在独立线程中,轮询程序接着从连接池中获取 JMSConnection,如何获取消息?使用 JMS 技术作为数据复制的解决方案(8),用它来创建一个 BytesMessage,并将这个文件的二进制内容放入那个消息中,这个保证是使用基于 JMS 解决方案的另一个重要优点,在自己设计的解决方案中开发这

在独立线程中,轮询程序接着从连接池中获取 JMSConnection,用它来创建一个 BytesMessage,并将这个文件的二进制内容放入那个消息中。最后这个消息查找到接收器,并发送到 JMS 服务器,接着将 JMSConnection 返回给 ConnectionPool。这个发送过程的部分步骤显示在下面的图 2 中。


图 2. 发送器过程
如何获取消息?使用 JMS 技术作为数据复制的解决方案

图片看不清楚?请点击这里查看原图(大图)。

接收器是一个较简单的组件;它启动一些 FileListener 来等待将要放置在接收器队列中的消息。下面的清单 4 中的代码显示了 FileListener 设置处理过程。图 6 中的类实际上负责从队列中检索消息并对它们进行存档。JMS 保证队列发送每个消息的次数仅一次,所以我们可以安全启动许多不同的 FileListener 线程并且知道每个消息(因此每个文件)只处理一次。这个保证是使用基于 JMS 解决方案的另一个重要优点。在自己设计的解决方案中开发这样的功能(比如基于 FTP 的功能),花销很大且易出错。


清单 4:来自类 ar.jms.file.receive.FileListener
public void startOn(Queue queue) { 
  setQueue(queue); 
  createConnection(); 
  try { 
    createSession(); 
    createReceiver(); 
    getConnection().start(); // this starts 
    the queue listener 
  } catch (JMSException exception) { 
    // Handle the exception 
  } 
} 
 
public void createReceiver() throws javax.jms.JMSException { 
  try { 
    QueueReceiver receiver = getSession(). 
createReceiver(getQueue()); 
    receiver.setMessageListener(this); 
  } catch (JMSException exception) { 
    // Handle the exception 
  } 
} 
public void createSession() throws JMSException { 
  setSession(getConnection(). 
createQueueSession(false, Session.AUTO_ACKNOWLEDGE)); 
} 
 
public void createConnection() { 
  while (!hasConnection()) { 
    try { 
      setConnection(getClient().createConnection()); 
    } catch (JMSException exception) { 
      // Connections drop periodically on the 
      internet, log and try again. 
      try { 
        Thread.sleep(2000); 
      } catch 
      (java.lang.InterruptedException ignored) { 
      } 
    } 
  } 
} 

上一页  3 4 5 6 7 8 9  下一页

Tags:如何 获取 消息

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接