在 Cassandra 中使用回调函数

Using Callback function in Cassandra

我想获得有关在 Cassandra 中实现回调函数的正确方法的建议。

我使用 Cassandra 的 C++ 驱动程序制作了一些 API。下面给出了我如何使用回调函数来执行我的查询(l_stmt 是准备好的语句,rtInsertCallback 是回调函数):

            CassFuture * l_query_future = cass_session_execute(RtConnectionObj::ms_session, l_stmt);
            CassError l_returnCode = cass_future_set_callback(l_query_future,rtInsertCallback,NULL);
            if(l_returnCode != CASS_OK)
            {

                    printf("\n [ %s::%d ] Error \n",__FILE__,__LINE__);

            }


            cass_future_free(l_query_future);

假设,上面的代码是在线程1中执行的,根据我目前的理解,回调函数将在设置未来时执行,并且也在一个单独的线程(线程2)中执行。回调函数是这样的:

void rtInsertCallback(CassFuture* l_csp_future, void *data)
{
        CassError l_returnCode = cass_future_error_code(l_csp_future);
        if (l_returnCode != CASS_OK)
        {
                printf("\n[%s::%d] %s ",__FILE__,__LINE__,cass_error_desc(l_returnCode));
        }
        else
        {
                printf("\n [%s::%d] Data Inserted successfully ...",__FILE__,__LINE__);
        }
}

我想知道,在设置未来之前或在线程 2 中执行 CassError l_returnCode = cass_future_error_code(l_csp_future); 语句之前,未来是否有可能被线程 1 释放,因此线程中的上述语句2 将在自由的未来运作?如果是,那么处理这种情况的正确方法应该是什么?如果这个问题没有任何意义(由于我对任何概念的误解),请解释。谢谢!

您可以在 "Thread 1" 回调语句后自由释放未来。回调将有自己的未来副本来处理。

Cassandra 回调函数还将在处理后负责资源清理。所以我们不必明确地释放未来。

可以在此处找到代码示例

https://github.com/datastax/cpp-driver/blob/master/examples/callbacks/callbacks.c