优化事件处理

时间:2019-03-17 22:02:39

标签: java multithreading events oracle-coherence

我在Java服务器组件中使用Oracle的Coherence缓存。 我正在使用以下事件处理程序订阅和侦听缓存更改事件:

public void entryUpdated(MapEvent mapEvent) 
        { 
         processUpdateEvent(mapEvent);
        }

public void entryDeleted(MapEvent mapEvent) 
        {
        //processDeleteEvent(mapEvent);
        } 
    public void entryInserted(MapEvent mapEvent) 
        {
             processInsertEvent(mapEvent);
        } 

有时候,我们在缓存上获得了大量“更新”事件(“删除”或“插入”事件的数量非常少)...而且看来我们当前的Java代码不够可扩展处理这种情况。因此,它在事件处理方面滞后了。

我正在尝试重新设计和优化此代码。

我想到的一件事是使用以下方法。但是我认为这没有意义,因为它将为每个新事件启动新线程,这将再次减慢服务器的整体性能。 请问还有其他方法可以优化此代码吗?

Thread thread = new Thread(new Runnable() {
                    public void run() {
processUpdateEvent();
                       }
                    });
                thread.start();

谢谢。

1 个答案:

答案 0 :(得分:0)

一致性侦听器与单个线程一起使用,因此唯一可行的解​​决方案是将事件过程委托给另一个线程,并尽快将侦听器线程留空。

优化事件驱动架构的可能解决方案要求您进行架构更改:您可以在数据存储节点上注册拦截器,然后在主题kafka上编写事件。这样,每个拦截器将仅处理部分事件(仅在同一数据存储节点中创建的事件),并且可以将您的Kafka使用者池配置为具有高性能和高可用性。

一致性侦听器方法面临的另一风险是您无法获得群集客户端和高可用性客户端。