Quarkus Dapr Extension provides a DevService to enhance your experience with Quarkus and Dapr.
Setting Dapr image
Dev Services for Dapr uses the latest daprio/daprd image (diagrid/daprd:latest). You can change this image using the quarkus.dapr.devservices.image-name property.
Using In-Memory Dapr Components
The component name for Pub/Sub in-memory is called pubsuband for State Store in-memory is calledkvstore.
Example of code using Pub/Sub and State Store in-memory:
DaprResource.java
package io.dapr.docs;
import io.dapr.Topic;
import io.dapr.client.domain.CloudEvent;
import io.dapr.client.domain.State;
import io.quarkiverse.dapr.core.SyncDaprClient;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.Response;
import java.util.Map;
import java.util.UUID;
@Path("/dapr")
public class DaprResource {
    @Inject
    SyncDaprClient client;
    @POST
    @Path("/state")
    public Response saveState() {
        client.saveState("kvstore", "identity", UUID.randomUUID().toString()); (1)
        return Response.ok().build();
    }
    @GET
    @Path("/state")
    public Response getState() {
        State<String> state = client.getState("kvstore", "identity", String.class);
        return Response.ok(Map.of("identity", state.getValue())).build();
    }
    @POST
    @Path("/pub")
    public void pub() {
        client.publishEvent("pubsub", "topicName", "Hello from Quarkus!"); (2)
    }
    @POST
    @Topic(name = "topicName") (3)
    @Path("/sub") (4)
    public void sub(CloudEvent<String> event) {
        System.out.println("Received event: " + event.getData());
    }
}| 1 | kvstoreis the name of the in-memory State Store component created by DevServices, andidentityis the key used to store the value. | 
| 2 | pubsubis the name of the in-memory Pub/Sub component created by DevServices, andtopicNameis the name of the topic used to publish the message (Hello from Quarkus!). | 
| 3 | topicNameis the name of the topic used to subscribe to the message, you need to add the@io.dapr.Topicannotation to map the topic.
If you want to add a custom Dapr component, you need to add it to thesrc/main/resources/componentsfolder. | 
| 4 | The value subcan be any value, it is used behind the scenes to map the endpoint to the topic. | 
The default quarkus.dapr.default-pub-subvalue isredis, so you need to change topubsubif you want to use the in-memory Pub/Sub component.
Adding Dapr Components
By default, Dapr DevServices create a Dapr container containing in-memory Pub/Sub and in-memory State Store building blocks. If you want to use a non-in-memory Dapr component, you need to add it to the src/main/resources/components folder.
Example of Pub/Sub using Redis.
src/main/resources/components/redis-pubsub.yaml
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: pubsub
spec:
  type: pubsub.redis
  version: v1
  metadata:
    - name: redisHost
      value: localhost:6379
    - name: redisPassword
      value: ""Example of State Store using Redis:
src/main/resources/components/redis-statestore.yaml
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
spec:
  type: state.redis
  version: v1
  metadata:
    - name: keyPrefix
      value: name
    - name: redisHost
      value: localhost:6379
    - name: redisPassword
      value: ""