首页 > 解决方案 > 优化事件处理

问题描述

我在我的 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();

谢谢。

标签: javamultithreadingeventsoracle-coherence

解决方案


一致性侦听器与单个线程一起工作,因此唯一可能的解决方案是将事件进程委托给另一个线程并尽快让侦听器线程空闲。

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

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


推荐阅读