2017-04-19 88 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