分布式事件

1.本地和远程事件

Ignite分布式事件功能使得应用可以接收分布式环境中发生的各种事件通知,可以自动获得有关集群中本地或远程节点上发生的任务执行、读,写或查询操作的通知。

该功能是通过IEvents接口提供的,通过如下方式可以获取IEvents接口的实例:

IIgnite ignite = Ignition.Start()

IEvents evts = ignite.GetEvents();
1
2
3

1.1.订阅事件

Listen方法可用于接收集群中发生的指定事件的通知。该方法会在本地节点为指定事件注册一个监听器。当任何节点发生该事件时,都会通知该监听器。

void Events()
{
    using (IIgnite ignite = Ignition.Start())
    {
        IEvents events = ignite.GetEvents();

        var listener = new CacheEventListener();

        // Subscribe to cache events.
        events.LocalListen(listener, EventType.CacheObjectPut, EventType.CacheObjectRead);

        // Generate event by adding cache entry.
        ignite.GetOrCreateCache<int, int>("myCache").Put(1, 1);

        // Unsubscribe.
        events.StopLocalListen(listener);
    }
}

class CacheEventListener : IEventListener<CacheEvent>
{
    public bool Invoke(CacheEvent evt)
    {
        Console.WriteLine("Received event [evt={0}, key={1}, oldVal={2}, newVal={3}]", evt.Name, evt.Key, evt.OldValue, evt.NewValue);

        return true; // Continue listening.
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

注意

EventType类定义了可用于监听方法的各种事件类型常量。IEventListener的泛型参数应对应于订阅的事件类型(例如CacheEvent对于EventType.Cache*)。另外IEvent可用于接收任何类型的事件。

警告

LocalListen(...)方法中以参数传递的事件类型,也需要在IgniteConfiguration中进行配置,具体参见下面的配置章节。

1.2.事件的查询

系统中产生的所有事件均保存在本地节点上,IEventsAPI提供了查询这些事件的方法。

远程事件

RemoteQuery(...)方法可通过传入的谓词过滤器查询指定远程节点上的事件。

1.3.配置

要接收集群中任何缓存或者任务的通知,必须配置IgniteConfiguration中的includeEventTypes属性:

C#:

var cfg = new IgniteConfiguration
{
    IncludedEventTypes = {EventType.TaskFailed, EventType.JobFinished}
};
1
2
3
4

app.config:

<igniteConfiguration>
    <includedEventTypes>
        <int>TaskFailed</int>
        <int>JobFinished</int>
    </includedEventTypes>
</igniteConfiguration>
1
2
3
4
5
6

Spring XML:

<bean class="org.apache.ignite.configuration.IgniteConfiguration">
 		...
    <property name="includeEventTypes">
        <util:constant static-field="org.apache.ignite.events.EventType.EVT_TASK_FAILED"/>
        <util:constant static-field="org.apache.ignite.events.EventType.EVT_JOB_FINISHED"/>
    </property>
  	...
</bean>
1
2
3
4
5
6
7
8

事件通知因为性能原因默认是关闭的。

提示

因为每秒会生成大量的事件,所以会给系统带来额外的负担,这会导致明显的性能下降。因此强烈建议仅启用应用的业务逻辑所需的那些事件。

最后更新时间:: 10/25/2019, 4:38:30 PM