【问题标题】:Are Cassandra triggers Asynchronous?Cassandra 触发器是异步的吗?
【发布时间】:2017-04-20 01:36:31
【问题描述】:

我正在测试 cassandra 触发器并实现了ITrigger 接口。 如票上https://issues.apache.org/jira/browse/CASSANDRA-1311 似乎 cassandra 触发器应该是异步的,这意味着在客户端进行插入后,客户端不应等待触发器被执行。

但是我在触发器中添加了 15 秒的睡眠,并且插入操作由于超时而失败。所以它似乎在等待触发器完成它的工作。

有没有办法让触发器异步工作? (根据我读过的页面,它应该已经是异步的了)

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    不,默认情况下 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;
    }
    

    【讨论】:

    • 非常感谢 Ashraful,我正在学习 cassandra 中的触发器,从未见过这个 QueryProcessor,你为我节省了很长时间 :)
    • 如果你想同步执行,那么只需删除线程部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2023-03-30
    • 2019-11-30
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多