Quarkus 与 Cassandra 伴随:迈向更快的微服务

随着 Quarkus 1.6 中发布的新的 Quarkus for Apache Cassandra® 扩展,只需几行代码即可连接并访问存储在 Cassandra 中的数据,并获得 Quarkus 的所有优势(快速启动、低资源利用率、响应式编程)。

要启用该扩展,请将 cassandra-quarkus-client 添加到您的应用程序中。您可以通过包含以下依赖项,或通过 项目生成器 选择 Cassandra 客户端来完成此操作。

# the version at time of writing is 1.0.0-alpha3
<dependency>
  <groupId>com.datastax.oss.quarkus</groupId>
  <artifactId>cassandra-quarkus-client</artifactId>
  <version>${cassandra-quarkus.version}</version>
</dependency>

最常见的数据库连接设置可以直接在类路径的 application.properties 文件中配置,示例如下。DataStax Cassandra Java 驱动的所有设置和功能都可供您使用,并且 高级驱动程序设置 可以放在类路径的 application.conf 文件中。

# Connecting to DataStax Astra astra.datastax.com
# if specified, contact-points and local-datacenter are not needed
quarkus.cassandra.cloud.secure-connect-bundle=/path/to/secure-connect-bundle.zip

# Connection details
quarkus.cassandra.contact-points=127.0.0.1:9042
quarkus.cassandra.local-datacenter=dc1
quarkus.cassandra.keyspace=<your keyspace>

# Authentication
quarkus.cassandra.auth.username=<your username>
quarkus.cassandra.auth.password=<your password>

一旦数据库连接配置完成,只需在您的应用程序中注入 QuarkusCqlSession 即可开始使用。为了与 响应式应用程序 无缝集成,QuarkusCqlSession 上有一个 executeReactive 方法,该方法公开了与 Mutiny 兼容的响应式执行方法和 Mutiny 类型的直接检索。

@ApplicationScoped
public class ProductService {

  @Inject
  private QuarkusCqlSession session;

  public Multi<Product> getAllProducts() {
    Multi<ReactiveRow> products = session.executeReactive("SELECT * from products");
    return products.on().item().apply(Product::new);
  }
}

在使用 Cassandra Java 驱动的 对象映射器 时,也可以获得 Mutiny 类型。借助 Quarkus Cassandra 扩展,您可以轻松定义映射的实体和 DAO,然后只需几行代码即可将 DAO 注入到您的响应式服务中!

例如,假设您有一个 Product 实体、一个 ProductDao 和一个具有标准 CRUD 操作的 ProductMapper,您可以将 DAO 暴露为可注入 Bean

public class ProductDaoProducer {

  private final ProductDao dao;

  @Inject
  public ProductDaoProducer(QuarkusCqlSession cqlSession) {
    ProductMapper mapper = new ProductMapperBuilder(cqlSession).build();
    this.dao = mapper.productDao();
  }

  @Produces @ApplicationScoped
  public ProductDao produceProductDao() { return dao; }
}

…然后像这样在 ProductService 组件中注入它

@ApplicationScoped
public class ProductService {

  @Inject
  private ProductDao dao;

  public Uni<Product> findProduct(String id) { return dao.findById(id); }

  public Multi<Product> getAllProducts() { return dao.findAll(); }
}

您可以在 快速入门指南 中找到此示例以及许多其他示例,其中包含如何在 原生模式 下使用 Quarkus Cassandra 扩展。对于希望在几分钟内开始使用 Cassandra 的用户,请尝试 DataStax Astra 的免费套餐。

我们重视您的反馈,因此请随时在 扩展 GitHub 仓库 中提交功能请求和错误报告,在 community.datastax.com 上提问,或加入 CassandraQuarkus 社区。

编码愉快!