我正在测试cassandra触发器并实现了ITrigger
接口。
如同票https://issues.apache.org/jira/browse/CASSANDRA-1311
似乎cassandra触发器应该是异步的,意味着在客户端进行插入后,客户端不应该等待触发器被执行。
但是我在Trigger中添加了15秒的睡眠,并且由于超时而导致插入操作失败。所以它似乎在等待触发完成其工作。
有没有办法让触发器工作asynch? (根据我读过的页面,它应该已经是异步的)
答案 0 :(得分:2)
不,默认情况下,Cassandra会等待触发器执行。
但您可以使用QueryProcessor
执行查询来更改它并运行到单独的线程中。请注意,如果执行此操作并触发执行失败,您将无法从主查询中知道触发器查询失败。
Cassandra 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;
}