ServiceMix企业服务总线(ESB)(三)

日期: 2007-12-10 来源:TechTarget中国

  典型的发送组件

  1.从ComponentContext组件获取javax.jbi.messaging.DeliveryChannel实例
  2.从DeliveryChannel实例获取javax.jbi.messaging.MessageExchangeFactory类实例
  3.使用MessageExchangeFactory实例创建包含消息内容的javax.jbi.messaging.MessageExchange实例
  4.通过DeliveryChannel实例将MessageExchange实例发送到目的地。

  代码5中通过发送组件发送基于字符串的XML消息

  代码5. 发送消息

public void sendMessage(String xml)
{
   try
   {
      ComponentContext context = getContext();
      InOnly exchange =
         context.getDeliveryChannel().
            createExchangeFactory().createInOnlyExchange();
      NormalizedMessage message = exchange.createMessage();
      message.setContent(new StringSource(xml));

      if (resolver != null)
      {
         ServiceEndpoint destination =
            resolver.resolveEndpoint(getContext(),
                                     exchange,
                                     NullEndpointFilter.getInstance());
         exchange.setEndpoint(destination);
      }

      exchange.setInMessage(message);

      // 现在,发送exchange消息
      context.getDeliveryChannel().send(exchange);
   }
   catch (Exception e)
   {
      e.printStackTrace();
   }
}
 
  对特定消息感兴趣的组件可以通过JBI框架提供的多种途径来订阅消息交换对象。一种简单机制是,接收组件可以实现MessageExchangeListener 接口,发送组件设定此接受者为org.servicemix.jbi.resolver.EndpointResolver端点解析组件。这样设定之后,ServiceMix会完成从发送者到接受者的消息传输过程。代码6说明了此过程。

  代码6 基于端点解析的简单接收过程

public class ReceiverComponent
   extends ComponentSupport
   implements MessageExchangeListener, Receiver
{

   // MessageExchangeListener接口的方法
   public void onMessageExchange(MessageExchange exchange)
      throws MessagingException
   {
      NormalizedMessage inMessage = exchange.getMessage(“in”);
      if (inMessage == null)
      {
         throw new MessagingException(“Null in message delivered!”);
      }
      System.out.println(inMessage);
   }
}

//创建接收与发送组件,并将接收组件设置为发送组件中的EndpointResolver对象
ReceiverComponent receiver = new ReceiverComponent();
SenderComponent sender = new SenderComponent();
sender.setResolver(new ServiceNameEndpointResolver(ReceiverComponent.QNAME));
 
  图3 是ServiceMix中发送接收简单消息交换的序列图

  图3. 发送接受简单消息

  在Windows中安装启动ServiceMix

  下载并在Windows系统中安装2进制分发包,需如下步骤:

  1.从ServiceMix.org下载Windows平台的ServiceMix分发包

  2.在目的目录中释放此压缩包。

  如下,在Windows命令行窗口中,转到ServiceMix安装目录,

  cd [servicemix_install_dir]bin

  替换servicemix_install_dir为ServiceMix的安装目录,如c:Program Filesservicemix-1.x. 然后敲servicemix命令。

  在Unix中安装启动ServiceMix

  过程如下:

  1.下载ServiceMix unix分发包。转到下载目录,解压gzip文件到目的目录,比如:

  gunzip servicemix-x.x.x.tar.gz

  tar xvf servicemix-x.x.x.tar

  2.如果启动脚本没有执行权限,修改一下bin目录下执行脚本的权限。如果[servicemix_install_dir]是你的安装目录,那么执行如下命令。

  cd [servicemix_install_dir]/bin

  chmod 755 servicemix

  在shell中,转到安装目录[servicemix_isntall_dir],执行启动脚本servicemix,来启动ServiceMix服务。

  cd [servicemix_install_dir]/bin.

  servicemix

  测试安装

  如果正确启动,Windows控制台窗口和Unix shell会显示类似如下信息:

  INFO JBIContainer — ServiceMix JBI Container

  name: defaultJBI running version: null

  终止ServiceMix服务

  在Windows窗口或unix shell中敲CTRL-C, 结束Servicemix服务。

  如果是Unix后台执行的ServiceMix,可以如下结束相应进程,

  ps -ef|grep servicemix

  kill PID

  替换 PID 为查询获得的实际ServiceMix进程的PID

  结论

  使用 SOA 架构服务,需要连接不同位置、不同传输协议、不同消息格式的组件或服务的基础设施,ESB企业服务总线满足这些需求。

  JBI规范和API定义了范化消息服务、组件框架、管理模型用于构建基于标准的可插拔的ESB系统。ServiceMix是轻量的、基于JBI规范语义和API的、开源ESB和SOA工具包,使用Apache许可证分发。Servicemix可以简单的作为嵌入式或者独立的ESB服务运行。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • SOA的2008年:应用软件开发hot stove联盟

    回首2008年,我们发现一个完整的SOA年。在2008年初,SearchSOA.com涉及Eclipse和影响SCA和JBI。看来,JavaScript框架和图书馆厂商-开放源码的倡导者,仍然处理Web……

  • SOA有哪些基本原则?

    在SOA中服务粒度有两种相关的意思,即服务是如何实现的,服务使用和返回了多少数据或多少消息。细粒度服务执行了最小的功能,发送和接收少量的数据……

  • JBI-Java实现SOA的标准途径

    本文简短地阐述了即将到来的与SOA(面向服务体系)规范及ESB(企业服务总线)基础架构有关的JBI(Java业务集成)标准……

  • JBI简介

    我最近听说有一些开始使用JBI 2.0 ,我感到很惊讶,因为我从来没有看到或听到任何关于JBI 1.0 。JBI 2.0版比原来的版本提供更多的承诺?