2017-06-04 27 views
0

我正在使用igniteDataStreamer,並想知道是否有可能使用來自閉包的事務。Ignite Transactional從DataStream Receiver不受支持?

不幸的是,即使CacheConfiguration atomicityMode是TRANSACTIONAL,Ignite也不會拋出任何TransactionOptimisticException,但從不同的IgniteDataStreamer線程運行同一記錄以更新緩存(StreamReceiver中的receive()方法)時,Ignite不會引發任何TransactionOptimisticException。

try (Transaction t = ignite.transactions().txStart(TransactionConcurrency.OPTIMISTIC, TransactionIsolation.SERIALIZABLE)) { 
      try { 
       cache.putAll(update); 
       t.commit(); 
      catch (TransactionOptimisticException toe) { 
       LOG.error("TransactionOptimisticException Could not put all the profiles",toe); 
      } 
     } 

回答

1

數據流不是事務性的。要在單個事務中執行更新,它們必須在同一節點和同一個線程上啓動。有關更多詳細信息和示例,請閱讀此處:https://apacheignite.readme.io/docs/transactions

+0

現在另一個問題是,如果我的應用程序作爲客戶端模式運行,則Ignite不再在接收方法中拋出TransactionOptimisticException。你能解釋一下爲什麼? –

+0

得到了我發送ignitetransactions而不是點燃實例本身的原因。 –