go-sdk/examples/socket/order.go

76 lines
1.8 KiB
Go

package main
import (
"context"
"fmt"
"strconv"
"time"
"github.com/alecthomas/kingpin/v2"
dapr "github.com/dapr/go-sdk/client"
)
const (
stateStoreName = `statestore`
socket = "/tmp/dapr-order-app-grpc.socket"
)
func main() {
var orderID int
put := kingpin.Command("put", "Send a new order.")
put.Flag("id", "order ID.").Default("1").IntVar(&orderID)
kingpin.Command("get", "Get current order.")
kingpin.Command("del", "Delete the order.")
kingpin.Command("seq", "Stream sequence of orders.")
// create the client
client, err := dapr.NewClientWithSocket(socket)
if err != nil {
panic(err)
}
defer client.Close()
ctx := context.Background()
switch kingpin.Parse() {
case "get":
fmt.Printf("Getting order\n")
item, err := client.GetState(ctx, stateStoreName, "order", nil)
if err != nil {
fmt.Printf("Failed to get state: %v\n", err)
}
if len(item.Value) > 0 {
fmt.Printf("Order ID %s\n", item.Value)
} else {
fmt.Printf("Order Not Found\n")
}
case "put":
fmt.Printf("Sending order ID %d\n", orderID)
err := client.SaveState(ctx, stateStoreName, "order", []byte(strconv.Itoa(orderID)), nil)
if err != nil {
fmt.Printf("Failed to persist state: %v\n", err)
} else {
fmt.Printf("Successfully persisted state\n")
}
case "del":
fmt.Printf("Deleting order\n")
err := client.DeleteState(ctx, stateStoreName, "order", nil)
if err != nil {
fmt.Printf("Failed to delete state: %v\n", err)
} else {
fmt.Printf("Successfully deleted state\n")
}
case "seq":
fmt.Printf("Streaming sequence of orders\n")
for {
orderID++
err := client.SaveState(ctx, stateStoreName, "order", []byte(strconv.Itoa(orderID)), nil)
if err != nil {
fmt.Printf("Failed to persist state: %v\n", err)
break
}
time.Sleep(1 * time.Second)
}
}
}