docs

Dapr用户文档

View project on GitHub

Actors

Dapr has a native, cross platform and cross-language virtual actor capabilities. Besides the language specific Dapr SDKs, a developer can invoke an actor using the API endpoints below.

Specifications for user service code calling to Dapr

Invoke a method on an Actor

This endpoint lets you invoke a method on a remote Actor.

HTTP Request

POST/GET/PUT/DELETE http://localhost:3500/v1.0/actors/<actorType>/<actorId>/method/<method>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
actorType the actor type
actorId the actor id
method the name of the method to invoke on the remote actor

Example of invoking a method on a remote actor:

curl -X POST http://localhost:3500/v1.0/actors/stormtrooper/50/method/shoot \
	-H "Content-Type: application/json"

Example of invoking a method on a remote actor with a payload:

curl -X POST http://localhost:3500/v1.0/actors/x-wing/33/method/fly \
	-H "Content-Type: application/json"
  -d '{
        "destination": "Hoth"
      }'

The response from the remote endpoint will be returned in the request body.

Save actor state

This endpoint lets you save state for a given actor for a given key.

HTTP Request

POST/PUT http://localhost:3500/v1.0/actors/<actorType>/<actorId>/state/<key>

HTTP Response codes

Code Description
201 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
actorType the actor type
actorId the actor id
key key for the state value
curl -X POST http://localhost:3500/v1.0/actors/stormtrooper/50/state/location \
	-H "Content-Type: application/json"
  -d '{
        "location": "Alderaan"
      }'

Save actor state - transaction

This endpoint lets you save an actor’s state as a multi item transaction.

Note that this operation is dependant on a state store that supports multi item transactions.

HTTP Request

POST/PUT http://localhost:3500/v1.0/actors/<actorType>/<actorId>/state

HTTP Response codes

Code Description
201 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
actorType the actor type
actorId the actor id
curl -X POST http://localhost:3500/v1.0/actors/stormtrooper/50/state \
	-H "Content-Type: application/json"
  -d '[
       {
         "operation": "upsert",
	 "request": {
	   "key": "key1",
	   "value": "myData"
	 }
       },
       {
         "operation": "delete",
	 "request": {
	   "key": "key2"
	 }
       }
      ]'

Get actor state

This endpoint lets you get the state of a given actor for a given key.

HTTP Request

GET http://localhost:3500/v1.0/actors/<actorType>/<actorId>/state/<key>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
actorType the actor type
actorId the actor id
key key for the state value
curl http://localhost:3500/v1.0/actors/stormtrooper/50/state/location \
	-H "Content-Type: application/json"

The above command returns the state:

{
  "location": "Alderaan"
}

Delete actor state

This endpoint lets you delete the state of a given actor for a given key.

HTTP Request

DELETE http://localhost:3500/v1.0/actors/<actorType>/<actorId>/state/<key>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
actorType the actor type
actorId the actor id
key key for the state value
curl http://localhost:3500/v1.0/actors/stormtrooper/50/state/location \
	-X "Content-Type: application/json"

Set actor reminder

This endpoint lets you create a persistent reminder for an actor.

HTTP Request

POST,PUT http://localhost:3500/v1.0/actors/<actorType>/<actorId>/reminders/<name>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
actorType the actor type
actorId the actor id
name the name of the reminder
curl http://localhost:3500/v1.0/actors/stormtrooper/50/reminders/checkRebels \
	-H "Content-Type: application/json"
-d '{
        "data": "someData",
	"dueTime": "1m",
	"period": "20s"
    }'

Get actor reminder

This endpoint lets get a reminder for an actor

HTTP Request

GET http://localhost:3500/v1.0/actors/<actorType>/<actorId>/reminders/<name>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
actorType the actor type
actorId the actor id
name the name of the reminder to get
curl http://localhost:3500/v1.0/actors/stormtrooper/50/reminders/checkRebels \
	 "Content-Type: application/json"

The above command returns the reminder:

{
  "dueTime": "1s",
  "period": "5s",
  "data": "0",
}

Delete actor reminder

This endpoint lets delete a reminder for an actor

HTTP Request

DELETE http://localhost:3500/v1.0/actors/<actorType>/<actorId>/reminders/<name>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
actorType the actor type
actorId the actor id
name the name of the reminder to delete
curl http://localhost:3500/v1.0/actors/stormtrooper/50/reminders/checkRebels \
	-X "Content-Type: application/json"

Set actor timer

This endpoint lets you create a timer for an actor.

HTTP Request

POST,PUT http://localhost:3500/v1.0/actors/<actorType>/<actorId>/timers/<name>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
actorType the actor type
actorId the actor id
name the name of the timer
curl http://localhost:3500/v1.0/actors/stormtrooper/50/timers/checkRebels \
	-H "Content-Type: application/json"
-d '{
        "data": "someData",
	"dueTime": "1m",
	"period": "20s",
	"callback": "myEventHandler"
    }'

Delete actor timer

This endpoint lets delete a timer for an actor

HTTP Request

DELETE http://localhost:3500/v1.0/actors/<actorType>/<actorId>/timers/<name>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
actorType the actor type
actorId the actor id
name the name of the timer to delete
curl http://localhost:3500/v1.0/actors/stormtrooper/50/timers/checkRebels \
	-X "Content-Type: application/json"

Specifications for Dapr calling to user service code

Get Registered Actors

This endpoint lets you get the registered actors in Dapr.

HTTP Request

GET http://localhost:<appPort>/v1.0/dapr/config

HTTP Response codes

Code Description
200 Request successful
500 Request failed

URL Parameters

Parameter Description
appPort the application port

Example of getting the registered actors:

curl -X GET http://localhost:5001/v1.0/dapr/config \
	-H "Content-Type: application/json"

Activate the Actors

This endpoint lets you activate the actor.

HTTP Request

POST http://localhost:<appPort>/v1.0/actors/<actorType>/<actorId>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
appPort the application port
actorType the actor type
actorId the actor id

Example of activating the actor:

curl -X POST http://localhost:5001/v1.0/actors/stormtrooper/50 \
	-H "Content-Type: application/json"

Deactivate the Actors

This endpoint lets you deactivate the actor.

HTTP Request

DELETE http://localhost:<appPort>/v1.0/actors/<actorType>/<actorId>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
appPort the application port
actorType the actor type
actorId the actor id

Example of deactivating the actor:

curl -X DELETE http://localhost:5001/v1.0/actors/stormtrooper/50 \
	-H "Content-Type: application/json"

Invoke the Reminders

This endpoint lets you invokes the actor reminders.

HTTP Request

PUT http://localhost:<appPort>/v1.0/actors/<actorType>/<actorId>/method/remind/<reminderName>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
appPort the application port
actorType the actor type
actorId the actor id
reminderName the name of the reminder

Example of invoking the actor reminder:

curl -X POST http://localhost:5001/v1.0/actors/stormtrooper/50/method/remind/checkRebels \
	-H "Content-Type: application/json"

Invoke the Timers

This endpoint lets you invokes the actor timers.

HTTP Request

PUT http://localhost:<appPort>/v1.0/actors/<actorType>/<actorId>/method/timer/<timerName>

HTTP Response codes

Code Description
200 Request successful
500 Request failed
404 Actor not found

URL Parameters

Parameter Description
appPort the application port
actorType the actor type
actorId the actor id
timerName the name of the timer

Example of invoking the actor timer:

curl -X POST http://localhost:5001/v1.0/actors/stormtrooper/50/method/timer/checkRebels \
	-H "Content-Type: application/json"

Querying actor state externally

In order to promote visibility into the state of an actor and allow for complex scenarios such as state aggregation, Dapr saves actor state in external databases.

As such, it is possible to query for an actor state externally by composing the correct key or query. The state namespace created by Dapr for actors is composed of the following items:

  • Dapr ID - represents the unique ID given to the Dapr application.
  • Actor Type - represents the type of the actor
  • Actor ID - represents the unique ID of the actor instance for an actor type
  • Key - A key for the specific state value. An actor ID can hold multiple state keys.

The following example shows how to construct a key for the state of an actor instance under the myapp Dapr ID namespace: myapp-cat-hobbit-food

In the example above, we are getting the value for the state key food, for the actor ID hobbit with an actor type of cat, under the Dapr ID namespace of myapp.