forked from dapr/go-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add Unix domain socket support (dapr#206)
* add Unix domain socket support Signed-off-by: Long <[email protected]> * update examples Signed-off-by: Long <[email protected]>
- Loading branch information
Showing
7 changed files
with
1,896 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
.PHONY: bin | ||
bin: go-mod | ||
go build -o order order.go | ||
|
||
.PHONY: go-mod | ||
go-mod: go-check | ||
go mod tidy | ||
go mod vendor | ||
|
||
.PHONY: go-check | ||
go-check: | ||
@which go > /dev/null | ||
|
||
.PHONY: clean | ||
clean: | ||
rm -f ./order |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
# Hello World with Unix domain socket | ||
|
||
This tutorial will demonstrate how to instrument your application with Dapr, and run it locally on your machine. | ||
You will deploying advanced `order` applications with [Unix domain socket](https://en.wikipedia.org/wiki/Unix_domain_socket) based on [Hello World](https://github.com/dapr/go-sdk/tree/main/examples/hello-world). | ||
|
||
There is a great performance imporvement With Unix domain socket, please notice that it does not support on Windows. | ||
|
||
## Prerequisites | ||
This quickstart requires you to have the following installed on your machine: | ||
- [Docker](https://docs.docker.com/) | ||
- [Go](https://golang.org/) | ||
|
||
## Step 1 - Setup Dapr | ||
|
||
Follow [instructions](https://docs.dapr.io/getting-started/install-dapr/) to download and install the Dapr CLI and initialize Dapr. | ||
|
||
## Step 2 - Understand the code | ||
|
||
The [order.go](./order.go) is a simple command line application, that implements four commands: | ||
* `put` sends an order with configurable order ID. | ||
* `get` return the current order number. | ||
* `del` deletes the order. | ||
* `seq` streams a sequence of orders with incrementing order IDs. | ||
|
||
First, the app instantiates Dapr client: | ||
|
||
```go | ||
client, err := dapr.NewClientWithSocket(socket) | ||
if err != nil { | ||
panic(err) | ||
} | ||
defer client.Close() | ||
``` | ||
|
||
Then, depending on the command line argument, the app invokes corresponding method: | ||
|
||
Persist the state: | ||
```go | ||
err := client.SaveState(ctx, stateStoreName, "order", []byte(strconv.Itoa(orderID))) | ||
``` | ||
Retrieve the state: | ||
```go | ||
item, err := client.GetState(ctx, stateStoreName, "order") | ||
``` | ||
Delete the state: | ||
```go | ||
err := client.DeleteState(ctx, stateStoreName, "order") | ||
``` | ||
|
||
## Step 3 - Run the app with Dapr | ||
|
||
1. Build the app | ||
|
||
<!-- STEP | ||
name: Build the app | ||
--> | ||
|
||
```bash | ||
make | ||
``` | ||
|
||
<!-- END_STEP --> | ||
|
||
2. Run the app | ||
|
||
There are two ways to launch Dapr applications. You can pass the app executable to the Dapr runtime: | ||
|
||
<!-- STEP | ||
name: Run and send order | ||
background: true | ||
sleep: 5 | ||
expected_stdout_lines: | ||
- '== APP == dapr client initializing for: /tmp/dapr-order-app-grpc.socket' | ||
- '== APP == Sending order ID 20' | ||
- '== APP == Successfully persisted state' | ||
--> | ||
|
||
```bash | ||
dapr run --app-id order-app --log-level error --unix-domain-socket /tmp -- ./order put --id 20 | ||
``` | ||
|
||
<!-- END_STEP --> | ||
|
||
<!-- STEP | ||
name: Run and get order | ||
background: true | ||
sleep: 5 | ||
expected_stdout_lines: | ||
- '== APP == dapr client initializing for: /tmp/dapr-order-app-grpc.socket' | ||
- '== APP == Getting order' | ||
- '== APP == Order ID 20' | ||
--> | ||
|
||
```bash | ||
dapr run --app-id order-app --log-level error --unix-domain-socket /tmp ./order get | ||
``` | ||
|
||
<!-- END_STEP --> | ||
|
||
Alternatively, you can start a standalone Dapr runtime, and call the app from another shell: | ||
|
||
```bash | ||
dapr run --app-id order-app --log-level error --unix-domain-socket /tmp | ||
``` | ||
|
||
|
||
```bash | ||
./order put --id 10 | ||
|
||
./order get | ||
``` | ||
|
||
To terminate your services, simply stop the "dapr run" process, or use the Dapr CLI "stop" command: | ||
|
||
```bash | ||
dapr stop --app-id order-app | ||
``` | ||
|
||
|
||
3. Run multiple apps | ||
|
||
You can run more than one app in Dapr runtime. In this example you will call `order seq` which sends a sequence of orders. | ||
Another instance of the `order` app will read the state. | ||
|
||
```sh | ||
dapr run --app-id order-app --log-level error --unix-domain-socket /tmp ./order seq | ||
``` | ||
|
||
```sh | ||
./order get | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
module github.com/dapr/go-sdk/examples/socket | ||
|
||
go 1.17 | ||
|
||
require ( | ||
github.com/dapr/go-sdk v1.2.0 | ||
gopkg.in/alecthomas/kingpin.v2 v2.2.6 | ||
) | ||
|
||
replace github.com/dapr/go-sdk => ../../ | ||
|
||
require ( | ||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect | ||
github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a // indirect | ||
github.com/dapr/dapr v1.4.3 // indirect | ||
github.com/golang/protobuf v1.5.2 // indirect | ||
github.com/pkg/errors v0.9.1 // indirect | ||
golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect | ||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22 // indirect | ||
golang.org/x/text v0.3.6 // indirect | ||
google.golang.org/genproto v0.0.0-20210524171403-669157292da3 // indirect | ||
google.golang.org/grpc v1.38.0 // indirect | ||
google.golang.org/protobuf v1.26.0 // indirect | ||
) |
Oops, something went wrong.