科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用JMS客户端利用空闲的计算机资源

用JMS客户端利用空闲的计算机资源

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

可以把JMS客户端放置在这些未充分利用的计算机上,从而分担一些通常应由服务器执行的工作。该客户端可以监听某个要执行的工作单元的请求队列,然后在应答队列上做出响应。

作者:中国IT实验室 来源:中国IT实验室 2007年8月24日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
  该方法使用了两个在BEA WebLogic Workshop中开发的WebLogic Integration (WLI)工作流,即Java流程定义(Java Process Definition,JPD)文件,它是BPEL/J (Business Process Engineering Language for Java)的前身。BPEL/J是在JSR 207中定义的。第一个工作流响应某些Web服务请求而启动,并执行初始化以通过一个JMS控件订阅JMS请求队列。该工作流使用一个Timer控件不停地进行循环,并定时唤醒一个while循环,从而在请求队列上放置更多的工作单元。该工作流还将使用一个定制Java控件(在本文相关代码中给出)来浏览请求队列,以便决定是否需要在队列上放置更多请求来防止队列出现过载。最后,工作流还将等待来自Web服务的停止消息,然后停止处理。第二个工作流执行的任务与前面例子中的消息驱动bean相同,因为它将对响应队列中的消息做出响应,以便从出队的响应队列调用print()和store()方法。这是一个生存期很短的工作流,而WebLogic Integration将按照要求产生足够的实例。
浏览JMS队列
  WebLogic Integration被用作一种为远程流程构造和汇编服务的机制。有现成的组件程序集,即Java控件,它使得开发人员可以轻松地构建复合应用程序而不需要进行大量的开发。尽管WebLogic Integration提供了开箱即用的JMS控件,用于在使用JMS时抽象化内部细节,在某些情况下,由于要细粒度地访问底层方法,最好还是创建一个可重用的定制控件。在这个示例框架中,我需要浏览工作请求队列,以统计在队列中等待的工作项的数量,然后决定能否在队列中放入更多工作项,而不会引起队列过载。为此,我们编写了一个定制Java控件,JMSBrowse,它有一个这样的方法:public interface JMSBrowse extends Control {
  int numberOfElementsInQueue(String qFactory, String qName);
}

   这个控件的实现使用了JMS QueueBrowser类来查看一个带有给定的JMS连接工厂的给定JMS队列。它返回队列中等待处理的实例个数。本文所附的代码中提供了完整实现。
启动和停止工作流的Web服务
  为了启动和停止负责把工作单元分发给请求队列的WebLogic Integration流程,我们创建了一个Java Web Service (JWS),它服从JSR 181,带有两个方法。public classControlWebService implements
                      com.bea.jws.WebService {
 /**
  *  @common:control
  */
 private Controls.JMSStopControlMessage JMSStopControl;
/**
 * @common:control
 */
 private Controls.JMSControlMessage JMSControl;
 static final long serialVersionUID = 1L;
 /**   
  * @common:operation
  */
 public void startFlow() {
   JMSControl.subscribe();
   JMSControl.sendTextMessage("start");
   JMSControl.unsubscribe();
 }
 /**
  * @common:operation
  */
  public void stopFlow() {
    JMSStopControl.subscribe();
    JMSStopControl.sendTextMessage("stop");
    JMSStopControl.unsubscribe();
  } 
}

   该Web服务不是直接调用工作流,而是把一条消息放在JMS队列中,然后调用Worker.Message把消息发送给分发JPD。这解除了Web服务实现与工作流之间的耦合,以保持其模块性。在WebLogic Integration中,有一个概念叫做事件生成器,可以使用WebLogic Integration Administration Console对它进行配置您可以把事件生成器配置为从JMS Worker.Message中取出消息,然后将其交付给一个Message Broker通道(逻辑概念)。分发工作流监听/UnitOfWork/StartWorkflow通道,该通道被绑定在与JMS Worker.Message队列相关联的JMS事件生成器上。只要有一个String “start”消息交付到此通道上,工作流就会开始工作。类似地,开始之后,分发工作流就会在它的一个Event Choice节点中监听Message Broker通道(/UnitOfWork/StopWorkflow),以便从Worker.StopMessage JMS队列接收”stop”消息。然后,事件生成器再次把Worker.StopMessage队列上的JMS消息关联到/UnitOfWork/StopWorkflow通道,以便交付消息。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章