2017-04-19 86 views
1

我正在測試cassandra觸發器並實現了ITrigger接口。 至於票https://issues.apache.org/jira/browse/CASSANDRA-1311 看來cassandra觸發器應該是異步的,意味着在客戶端進行插入之後,客戶端不應該等待觸發器被執行。Cassandra觸發異步嗎?

但我在Trigger中添加了一個類似15秒的睡眠,並且插入操作因超時而失敗。所以它似乎正在等待觸發器完成其工作。

有沒有辦法讓觸發器工作異步? (根據我已閱讀的頁面,它應該已經是異步)

回答

2

不,默認情況下Cassandra等待觸發器執行。

但是,您可以使用執行查詢與QueryProcessor更改並運行到單獨的線程。請注意,如果您這樣做並觸發執行失敗,則無法知道觸發查詢是否從主查詢中失敗。

舉例卡桑德拉2.X:

@Override 
public Collection<Mutation> augment(ByteBuffer key, ColumnFamily update) { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      //build your own query from the ByteBuffer key and ColumnFamily update 
      Insert insert = QueryBuilder.insertInto("test_keyspace.test_table").value("id", 1).value("data", "Test"); 

      //execute query 
      QueryProcessor.process(insert.toString(), ConsistencyLevel.LOCAL_QUORUM); 
     } 
    }).start(); 
    return Collections.EMPTY_LIST; 
} 
+0

非常感謝你Ashraful,我學習的卡桑德拉觸發器,從來沒有見過這種QueryProcessor,如果你想在同步執行你救了我很長一段時間:) – Oktay

+0

然後只刪除線程部分 –

+0

我看到線程類現在對不起:) – Oktay