The English version of is the official project site. Translated sites are community supported on a best-effort basis.

A Shot of Quarkus with a Cassandra Chaser: Time for Faster Microservices

With the new Quarkus extension for Apache Cassandra® released in Quarkus 1.6, all it takes is a few lines of code to connect to and access your data stored in Cassandra and you get all of the benefits of Quarkus (fast-startup, low resource utilization, reactive programming).

To enable the extension, add cassandra-quarkus-client to your application. You can do this by including the following dependency or by selecting Cassandra client in the project generator.

# the version at time of writing is 1.0.0-alpha3

The most common database connection settings can be configured directly in an file on the classpath, see below for an example. All of the settings and features of the DataStax Java driver for Cassandra are available to you and the advanced driver settings can be placed in an application.conf file on the classpath.

# Connecting to DataStax Astra
# if specified, contact-points and local-datacenter are not needed

# Connection details
quarkus.cassandra.keyspace=<your keyspace>

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

Once the database connection is configured, simply inject the QuarkusCqlSession in your application to get started. For seamless integration with reactive applications, there is an executeReactive method on the QuarkusCqlSession that exposes Mutiny-compatible reactive execution methods and direct retrieval of Mutiny types.

public class ProductService {

  private QuarkusCqlSession session;

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

Mutiny types are also available when using the Cassandra Java driver’s object mapper. With the Quarkus Cassandra extension, you can easily define your mapped entities and DAOs and then inject your DAOs in your reactive services in just a few lines of code!

For example, suppose that you have a Product entity, a ProductDao and a ProductMapper with standard CRUD operations, you can expose your DAO as an injectable bean:

public class ProductDaoProducer {

  private final ProductDao dao;

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

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

… then inject it in a ProductService component, as follows:

public class ProductService {

  private ProductDao dao;

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

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

You can retrieve this example and many others in the quickstart guide, which includes how to use the Quarkus Cassandra extension in native mode. For users that are looking to get up and running in minutes with Cassandra, try out the free-tier in DataStax Astra.

We value your feedback so please don’t hesitate to open feature requests and bug reports in the extensions GitHub repository, ask questions at, or join the Cassandra and Quarkus communities.

Happy subatomic coding!