【问题标题】:Spring Data Cassandra getQueriedHostSpring Data Cassandra getQueriedHost
【发布时间】:2020-02-19 23:52:00
【问题描述】:

我正在使用 Spring Data Casandra (2.0.14.RELEASE),并且我的存储库扩展了 CassandraRepository<T, MapId>。我想得到queried host。当我们在 Repository 上调用 CRUD 方法时,有没有办法获得 execution info ?

我想知道在每次 CRUD 操作期间查询了哪个 HOST。是否可以在后台线程中编写一些内容并记录它,这每当存储库上发生任何 CRUD 操作时都会触发对 getQueriedHost 的调用?

提前致谢

昂舒曼

【问题讨论】:

    标签: java spring cassandra spring-data spring-data-cassandra


    【解决方案1】:

    spring cassandra 连接器在后台使用 Datastax Java 客户端,您可以查看如何构造 client connection here。

    包含结果的结果集包含查询的各种主机的列表:

    Cluster.Builder b = Cluster.builder().addContactPoint("127.0.0.1");
    Cluster cluster = b.build();
    Session session = cluster.connect();
    
    SimpleStatement ss = new SimpleStatement("SELECT * FROM system_schema.tables LIMIT 1");
    ss.setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
    
    ResultSet rs = session.execute(ss);
    for (Row r : rs.all()) {
        System.out.println("res: " + r);
    }
    
    // you can get the contacted hosts here, this will show you what node 
    // coordinated the request from the Cassandra side. 
    for (ExecutionInfo ei : rs.getAllExecutionInfo()) {
        System.out.println("Host queried: " + ei.getQueriedHost().getAddress());
    }
    

    示例输出:

    res: Row[...]
    Host queried: /127.0.0.1
    Host queried: /127.0.0.2
    Host queried: /127.0.0.3
    

    【讨论】:

    • 谢谢。正如我所说,我不做任何这些。一切都由存储库抽象出来。我只是从 PoJo 调用 Repository 方法。我没有明确地准备语句和明确地调用执行(你做了什么session.execute)。存储库不公开此 ResultSet 对象。它有findAll、findAllById等......方法。
    猜你喜欢
    • 2018-08-23
    • 2020-10-31
    • 1970-01-01
    • 2019-02-22
    • 2020-01-19
    • 2021-08-19
    • 2015-04-20
    • 2015-01-31
    • 2017-06-26
    相关资源
    最近更新 更多