【问题标题】:Apache Ignite server crashes after incorporating Auditing events合并审计事件后 Apache Ignite 服务器崩溃
【发布时间】:2021-08-21 13:40:42
【问题描述】:

在开始时,它工作正常,但在一定时间(1-2 小时)后,它崩溃,并在服务器日志中出现以下异常。

ERROR 1 --- [-ignite-server%] : JVM 将因故障立即停止:[failureCtx=FailureContext [type=CRITICAL_ERROR, err=class oaiiIgniteDeploymentCheckedException: 未能获得类的部署:com. event.audit.AuditEventListener$$Lambda$1484/0x0000000800a7ec40]]

public static void remoteListener(Ignite ignite) {
    // This optional local callback is called for each event notification


    // that passed remote predicate listener.
    IgniteBiPredicate<UUID, CacheEvent> locLsnr = new IgniteBiPredicate<UUID, CacheEvent>() {
      @Override public boolean apply(UUID nodeId, CacheEvent evt) {
        System.out.println("Listener caught an event");

        //--- My custom code to persists the event in another cache
    };

    IgnitePredicate<CacheEvent> remoteListener = cacheEvent -> {
      return true;
    };

    // Register event listeners on all nodes to listen for task events.
    UUID lsnrId = ignite.events(ignite.cluster()).remoteListen(locLsnr, remoteListener, EVT_CACHE_OBJECT_PUT, EVT_CACHE_OBJECT_REMOVED);
  }
}

【问题讨论】:

  • 日志中是否有任何线程转储或堆栈跟踪?

标签: spring-boot docker docker-compose ignite


【解决方案1】:

据我了解,您尝试在事件监听器中执行缓存操作:

//--- 我的自定义代码将事件保存在另一个缓存中

事件侦听器在锁下被调用,在侦听器中进行任何其他缓存操作是个坏主意。我想这可能是您问题的根本原因。

尝试改变您的设计,例如您可以将捕获的事件添加到队列中,然后在另一个线程中读取此队列并将数据保存在另一个缓存中。

【讨论】:

  • 是的,服务器不再崩溃,我所做的,我在一个单独的线程中执行了缓存操作,而不是事件侦听器函数本身。还有一个问题,当调用事件侦听器时,整个服务器缓存都被锁定,或者捕获事件的特定缓存被锁定。
  • 它应该是每个缓存的行为。同时,您可能会检查与事件非常相似但以异步方式运行的连续查询功能(允许用户代码在侦听器线程中)。你可以在这里阅读更多:ignite.apache.org/docs/latest/key-value-api/continuous-queries
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 2021-02-05
相关资源
最近更新 更多