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 上提问,或加入 Cassandra 和 Quarkus 社区。
编码愉快!