SOA架构中的事件驱动服务

豆豆网   技术应用频道   2008年01月22日  【字号: 收藏本文

内容摘要:讨论使用Mule实现一个高效的事件驱动和面向服务的平台,一个轻量级的事件-消息架构,企业信息总线(ESB)模式。组件和程序可以使用Mule通过公共的JMS或其他的消息处理技术去实现通信。

  Mule框架依据消息有效载荷的类型来派遣消息。事件框架使用基于有效载荷的派遣机制,这种派遣机制把注册到事件管理器中一般定义的事件方法作为事件接收器。下面的类定义了一个包含三个重载的receiveEvent()方法的服务:

package com.jeffhanson.mule;
  
import java.util.Date;
  
public class TestService
{
  public void receiveEvent(String eventMessage)
  {
   System.out.println("
TestService.receiveEvent(String) received "
             + "event message: " + eventMessage + "
");
  }
  
  public void receiveEvent(Integer eventMessage)
  {
   System.out.println("
TestService.receiveEvent(Integer) received "
             +"event message: " + eventMessage + "
");
  }
  
  public void receiveEvent(Date eventMessage)
  {
   System.out.println("
TestService.receiveEvent(Date) received "
             + "event message: " + eventMessage + "
");
  }
}

  事件管理器客户端应用程序发送三个事件到测试服务中,去测试每一个receiveEvent()方法。客户端应用程序如下:

package com.jeffhanson.mule;
  
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.BasicConfigurator;
  
import java.util.Date;
  
public class EventClient
{
  static Logger logger = Logger.getLogger(EventClient.class);
  
  public static void main(String[] args)
  {
   // Set up a simple configuration that logs on the console.
   BasicConfigurator.configure();
   logger.setLevel(Level.ALL);
  
   try
   {
     EventManager eventManager =
      EventManagerFactory.getInstance("vm://");
     eventManager.start();
  
     String serviceName = TestService.class.getName();
     String implementation = serviceName;
  
     eventManager.registerService(serviceName, implementation);
  
     Object result =
      eventManager.sendSynchronousEvent(serviceName, "A test message");
  
     if (result != null)
     {
      System.out.println("Event result: " + result.toString());
     }
  
     result =
      eventManager.sendSynchronousEvent(serviceName, new Integer(23456));
  
     if (result != null)
     {
      System.out.println("Event result: " + result.toString());
     }
  
     result =
      eventManager.sendSynchronousEvent(serviceName, new Date());
  
     if (result != null)
     {
      System.out.println("Event result: " + result.toString());
     }
  
     eventManager.stop();
   }
   catch (EventException e)
   {
     System.err.println(e.toString());
   }
  }
}

  Mule平台简化和抽象了前面所叙述框架的事件方面的处理,使得你发送和接收穿越一个层级结构的同步和异步消息时,不需要知道下层系统的细节。工厂模式和SOA准则的应用,则使得这个框架有了一个松散耦合和可扩展的设计。

  总结

  当服务和进程需要穿越多层结构,使用多种协议去交互时,设计一个有效地事件驱动的软件系统可能变得复杂了。可是,一个使用标准模式包含适当事件管理层的面向服务架构能减少,甚至消除这些问题。

  Mule 平台提供API,组件和抽象对象,这些都可以用于去建立一个强大,健壮,事件驱动的有着良好的伸缩性和可维护性的系统。

责编:豆豆技术应用

正在加载评论...