Global Event

Global Event是bukcy框架提供的一个非常有用的组件。实现了一个逻辑上非常常用的功能:

“在系统中定义一个全局事件,然后在任何一段代码中都可以Attach这个事件,在任何一段代码中都可以Fire这个事件。”

在传统的后台开发中,我们常常使用消息中间件来达到类似功能。从过去的经验来看,我们鼓励应用尽量使用端到端的无状态事件系统(即系统允许丢失事件),当然bucky也允许用户开发自己的有状态事件系统。

Global Event的使用也很简单:

创建并监听事件

let em = getCurrentRuntime().getGlobalEventManager();
let eventCategory = 'myEventCatagory';
let eventID = 'myMessage';

// create an event catagory
em.create(eventCategory, (result) => {

    // attach an eventID on the event catagory
    console.log(`${eventCategory} is created:${result}`);
    em.attach(eventCategory, eventID, (msg) => {
        console.log(`${eventCategory}/${eventID} is fired:`, msg);
    };
});

触发事件

let em = getCurrentRuntime().getGlobalEventManager();
let eventCategory = 'myEventCatagory';
let eventID = 'myMessage';

// Fire the eventID on the event catagory
let msg = JSON.stringify({
    cmd:'echo',
    body:{
        text:'Real-world programming, however, requires care, expertise, and wisdom.',
        from:'SICP'
    }
});
em.activeEvent(eventCategory, eventID, msg);

代码说明

从上述代码中我们可以看出来:

  1. Global Event的操作接口都是异步的。
  2. Global Event的由event catagory/eventID两层结构构成,方便用户组织事件的名字空间。
  3. Global Event的参数是一个字符串,我们一般鼓励在里面填写一个stringfiy后的JSON.
  4. Global Event是应用程序全局的,所以具有分布式系统在一致性方面的特性:attach成功之后存在与事件控制器失去链接的可能,而系统并不会保证在失去连接的这段时间内产生的事件不会丢失。

results matching ""

    No results matching ""