mirror of https://github.com/dapr/docs.git
Merge branch 'v1.0' into add/php
This commit is contained in:
commit
a908b210b1
|
@ -0,0 +1 @@
|
|||
// Intentionally blank
|
|
@ -1,14 +1,53 @@
|
|||
// Code formatting.
|
||||
|
||||
.copy-code-button {
|
||||
color: #272822;
|
||||
background-color: #FFF;
|
||||
border-color: #0D2192;
|
||||
border: 2px solid;
|
||||
border-radius: 3px 3px 0px 0px;
|
||||
|
||||
/* right-align */
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: 0;
|
||||
|
||||
margin-bottom: -2px;
|
||||
padding: 3px 8px;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.copy-code-button:hover {
|
||||
cursor: pointer;
|
||||
background-color: #F2F2F2;
|
||||
}
|
||||
|
||||
.copy-code-button:focus {
|
||||
/* Avoid an ugly focus outline on click in Chrome,
|
||||
but darken the button for accessibility.
|
||||
See https://stackoverflow.com/a/25298082/1481479 */
|
||||
background-color: #E6E6E6;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.copy-code-button:active {
|
||||
background-color: #D9D9D9;
|
||||
}
|
||||
|
||||
.highlight pre {
|
||||
/* Avoid pushing up the copy buttons. */
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.td-content {
|
||||
// Highlighted code.
|
||||
.highlight {
|
||||
@extend .card;
|
||||
|
||||
margin: 2rem 0;
|
||||
padding: 0;
|
||||
margin: 0rem 0;
|
||||
padding: 0rem;
|
||||
|
||||
max-width: 80%;
|
||||
max-width: 100%;
|
||||
|
||||
pre {
|
||||
margin: 0;
|
||||
|
@ -37,7 +76,8 @@
|
|||
word-wrap: normal;
|
||||
background-color: $gray-100;
|
||||
padding: $spacer;
|
||||
|
||||
|
||||
max-width: 100%;
|
||||
|
||||
> code {
|
||||
background-color: inherit !important;
|
||||
|
|
|
@ -52,25 +52,25 @@ id = "UA-149338238-3"
|
|||
|
||||
# Top Nav Bar
|
||||
[[menu.main]]
|
||||
name = "Home"
|
||||
name = "Homepage"
|
||||
weight = 40
|
||||
url = "https://dapr.io"
|
||||
[[menu.main]]
|
||||
name = "About"
|
||||
name = "GitHub"
|
||||
weight = 50
|
||||
url = "https://dapr.io/#about"
|
||||
[[menu.main]]
|
||||
name = "Download"
|
||||
weight = 60
|
||||
url = "https://dapr.io/#download"
|
||||
url = "https://github.com/dapr"
|
||||
[[menu.main]]
|
||||
name = "Blog"
|
||||
weight = 70
|
||||
weight = 60
|
||||
url = "https://blog.dapr.io/posts"
|
||||
[[menu.main]]
|
||||
name = "Discord"
|
||||
weight = 70
|
||||
url = "https://aka.ms/dapr-discord"
|
||||
[[menu.main]]
|
||||
name = "Community"
|
||||
weight = 80
|
||||
url = "https://dapr.io/#community"
|
||||
url = "https://github.com/dapr/community/blob/master/README.md"
|
||||
|
||||
[params]
|
||||
copyright = "Dapr"
|
||||
|
|
|
@ -87,6 +87,8 @@ Dapr can be used from any developer framework. Here are some that have been int
|
|||
|
||||
Dapr integrates easily with Python [Flask](https://pypi.org/project/Flask/) and node [Express](http://expressjs.com/). See examples in the [Dapr quickstarts](https://github.com/dapr/quickstarts).
|
||||
|
||||
In the Dapr [PHP-SDK](https://github.com/dapr/php-sdk) you can serve with Apache, Nginx, or Caddyserver.
|
||||
|
||||
#### Actors
|
||||
Dapr SDKs support for [virtual actors]({{< ref actors >}}) which are stateful objects that make concurrency simple, have method and state encapsulation, and are designed for scalable, distributed applications.
|
||||
|
||||
|
|
|
@ -6,4 +6,4 @@ weight: 60
|
|||
description: See and measure the message calls across components and networked services
|
||||
---
|
||||
|
||||
This section includes guides for developers in the context of observability. See other sections for a [general overview of the observability concept]({{< ref observability >}}) in Dapr and for [operations guidance on monitoring]({{< ref monitoring >}}).
|
||||
This section includes guides for developers in the context of observability. See other sections for a [general overview of the observability concept]({{< ref observability-concept >}}) in Dapr and for [operations guidance on monitoring]({{< ref monitoring >}}).
|
||||
|
|
|
@ -23,9 +23,44 @@ Let's get started!
|
|||
|
||||
## Add Dapr as an 'External Tool'
|
||||
|
||||
First, quit IntelliJ.
|
||||
First, quit IntelliJ before modifying the configurations file directly.
|
||||
|
||||
Create or edit the file in `$HOME/.IdeaIC2019.3/config/tools/External\ Tools.xml` (change IntelliJ version in path if needed) to add a new `<tool></tool>` entry:
|
||||
### IntelliJ configuration file location
|
||||
For versions [2020.1](https://www.jetbrains.com/help/idea/2020.1/tuning-the-ide.html#config-directory) and above the configuration files for tools should be located in:
|
||||
|
||||
{{< tabs Windows Linux MacOS >}}
|
||||
|
||||
{{% codetab %}}
|
||||
|
||||
```powershell
|
||||
%USERPROFILE%\AppData\Roaming\JetBrains\IntelliJIdea2020.1\tools\
|
||||
```
|
||||
{{% /codetab %}}
|
||||
|
||||
|
||||
{{% codetab %}}
|
||||
```shell
|
||||
$HOME/.config/JetBrains/IntelliJIdea2020.1/tools/
|
||||
```
|
||||
{{% /codetab %}}
|
||||
|
||||
|
||||
{{% codetab %}}
|
||||
```shell
|
||||
~/Library/Application Support/JetBrains/IntelliJIdea2020.1/tools/
|
||||
```
|
||||
{{% /codetab %}}
|
||||
|
||||
|
||||
{{< /tabs >}}
|
||||
|
||||
> The configuration file location is different for version 2019.3 or prior. See [here](https://www.jetbrains.com/help/idea/2019.3/tuning-the-ide.html#config-directory) for more details.
|
||||
|
||||
Change the version of IntelliJ in the path if needed.
|
||||
|
||||
Create or edit the file in `<CONFIG PATH>/tools/External\ Tools.xml` (change IntelliJ version in path if needed). The `<CONFIG PATH>` is OS dependennt as seen above.
|
||||
|
||||
Add a new `<tool></tool>` entry:
|
||||
|
||||
```xml
|
||||
<toolSet name="External Tools">
|
||||
|
@ -33,10 +68,10 @@ Create or edit the file in `$HOME/.IdeaIC2019.3/config/tools/External\ Tools.xml
|
|||
<!-- 1. Each tool has its own app-id, so create one per application to be debugged -->
|
||||
<tool name="dapr for DemoService in examples" description="Dapr sidecar" showInMainMenu="false" showInEditor="false" showInProject="false" showInSearchPopup="false" disabled="false" useConsole="true" showConsoleOnStdOut="true" showConsoleOnStdErr="true" synchronizeAfterRun="true">
|
||||
<exec>
|
||||
<!-- 2. For Linux or MacOS use: /usr/local/bin/daprd -->
|
||||
<option name="COMMAND" value="C:\dapr\daprd.exe" />
|
||||
<!-- 2. For Linux or MacOS use: /usr/local/bin/dapr -->
|
||||
<option name="COMMAND" value="C:\dapr\dapr.exe" />
|
||||
<!-- 3. Choose app, http and grpc ports that do not conflict with other daprd command entries (placement address should not change). -->
|
||||
<option name="PARAMETERS" value="-app-id demoservice -app-port 3000 -dapr-http-port 3005 -dapr-grpc-port 52000 -placement-host-address localhost:50005" />
|
||||
<option name="PARAMETERS" value="run -app-id demoservice -app-port 3000 -dapr-http-port 3005 -dapr-grpc-port 52000 />
|
||||
<!-- 4. Use the folder where the `components` folder is located -->
|
||||
<option name="WORKING_DIRECTORY" value="C:/Code/dapr/java-sdk/examples" />
|
||||
</exec>
|
||||
|
@ -53,7 +88,7 @@ Optionally, you may also create a new entry for a sidecar tool that can be reuse
|
|||
<!-- 1. Reusable entry for apps with app port. -->
|
||||
<tool name="dapr with app-port" description="Dapr sidecar" showInMainMenu="false" showInEditor="false" showInProject="false" showInSearchPopup="false" disabled="false" useConsole="true" showConsoleOnStdOut="true" showConsoleOnStdErr="true" synchronizeAfterRun="true">
|
||||
<exec>
|
||||
<!-- 2. For Linux or MacOS use: /usr/bin/dapr -->
|
||||
<!-- 2. For Linux or MacOS use: /usr/local/bin/dapr -->
|
||||
<option name="COMMAND" value="c:\dapr\dapr.exe" />
|
||||
<!-- 3. Prompts user 4 times (in order): app id, app port, Dapr's http port, Dapr's grpc port. -->
|
||||
<option name="PARAMETERS" value="run --app-id $Prompt$ --app-port $Prompt$ --dapr-http-port $Prompt$ --dapr-grpc-port $Prompt$" />
|
||||
|
@ -64,7 +99,7 @@ Optionally, you may also create a new entry for a sidecar tool that can be reuse
|
|||
<!-- 1. Reusable entry for apps without app port. -->
|
||||
<tool name="dapr without app-port" description="Dapr sidecar" showInMainMenu="false" showInEditor="false" showInProject="false" showInSearchPopup="false" disabled="false" useConsole="true" showConsoleOnStdOut="true" showConsoleOnStdErr="true" synchronizeAfterRun="true">
|
||||
<exec>
|
||||
<!-- 2. For Linux or MacOS use: /usr/bin/dapr -->
|
||||
<!-- 2. For Linux or MacOS use: /usr/local/bin/dapr -->
|
||||
<option name="COMMAND" value="c:\dapr\dapr.exe" />
|
||||
<!-- 3. Prompts user 3 times (in order): app id, Dapr's http port, Dapr's grpc port. -->
|
||||
<option name="PARAMETERS" value="run --app-id $Prompt$ --dapr-http-port $Prompt$ --dapr-grpc-port $Prompt$" />
|
||||
|
@ -108,3 +143,7 @@ After debugging, make sure you stop both `dapr` and your app in IntelliJ.
|
|||
>Note: Since you launched the service(s) using the **dapr** ***run*** CLI command, the **dapr** ***list*** command will show runs from IntelliJ in the list of apps that are currently running with Dapr.
|
||||
|
||||
Happy debugging!
|
||||
|
||||
## Related links
|
||||
|
||||
- [Change](https://intellij-support.jetbrains.com/hc/en-us/articles/206544519-Directories-used-by-the-IDE-to-store-settings-caches-plugins-and-logs) in IntelliJ configuration directory location
|
||||
|
|
|
@ -28,6 +28,12 @@ no_list: true
|
|||
| [Twitter]({{< ref twitter.md >}}) | ✅ | ✅ | Alpha |
|
||||
| [SendGrid]({{< ref sendgrid.md >}}) | | ✅ | Alpha |
|
||||
|
||||
### Alibaba Cloud
|
||||
|
||||
| Name | Input<br>Binding | Output<br>Binding | Status |
|
||||
|------|:----------------:|:-----------------:|--------|
|
||||
| [Alibaba Cloud OSS]({{< ref alicloudoss.md >}}) | | ✅ | Alpha |
|
||||
|
||||
### Amazon Web Services (AWS)
|
||||
|
||||
| Name | Input<br>Binding | Output<br>Binding | Status |
|
||||
|
|
|
@ -0,0 +1,106 @@
|
|||
---
|
||||
type: docs
|
||||
title: "Alibaba Cloud Object Storage Service binding spec"
|
||||
linkTitle: "Alibaba Cloud Object Storage"
|
||||
description: "Detailed documentation on the Alibaba Cloud Object Storage binding component"
|
||||
---
|
||||
|
||||
## Component format
|
||||
|
||||
To setup an Alibaba Cloud Object Storage binding create a component of type `bindings.alicloud.oss`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a secretstore configuration. See this guide on [referencing secrets]({{< ref component-secrets.md >}}) to retrieve and use the secret with Dapr components.
|
||||
|
||||
```yaml
|
||||
apiVersion: dapr.io/v1alpha1
|
||||
kind: Component
|
||||
metadata:
|
||||
name: alicloudobjectstorage
|
||||
namespace: default
|
||||
spec:
|
||||
type: bindings.alicloud.oss
|
||||
version: v1
|
||||
metadata:
|
||||
- name: endpoint
|
||||
value: "[endpoint]"
|
||||
- name: accessKeyID
|
||||
value: "[key-id]"
|
||||
- name: accessKey
|
||||
value: "[access-key]"
|
||||
- name: bucket
|
||||
value: "[bucket]"
|
||||
```
|
||||
|
||||
{{% alert title="Warning" color="warning" %}}
|
||||
The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}).
|
||||
{{% /alert %}}
|
||||
|
||||
## Spec metadata fields
|
||||
|
||||
| Field | Required | Details | Example |
|
||||
|---------------|----------|---------|---------|
|
||||
| `endpoint` | Y | Alicloud OSS endpoint. | https://oss-cn-hangzhou.aliyuncs.com
|
||||
| `accessKeyID` | Y | Access key ID credential. |
|
||||
| `accessKey` | Y | Access key credential. |
|
||||
| `bucket` | Y | Name of the storage bucket. |
|
||||
|
||||
## Output operations
|
||||
|
||||
The following operations are supported as within the output binding:
|
||||
|
||||
### Create object
|
||||
|
||||
To perform a create object operation, invoke the binding with a `POST` method and the following JSON body:
|
||||
|
||||
```json
|
||||
{
|
||||
"operation": "create",
|
||||
"data": "YOUR_CONTENT"
|
||||
}
|
||||
```
|
||||
|
||||
{{% alert title="Note" color="primary" %}}
|
||||
By default, a random UUID is auto-generated as the object key. See below for Metadata support to set the key for the object.
|
||||
{{% /alert %}}
|
||||
|
||||
#### Example
|
||||
|
||||
**Saving to a random generated UUID file**
|
||||
|
||||
```bash
|
||||
curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
**Saving to a specific file**
|
||||
|
||||
```bash
|
||||
curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"key\": \"my-key\" } }" http://localhost:<dapr-port>/v1.0/bindings/<binding-name>
|
||||
```
|
||||
|
||||
{{% alert title="Note" color="primary" %}}
|
||||
Windows CMD requires escaping the `"` character.
|
||||
{{% /alert %}}
|
||||
|
||||
## Metadata information
|
||||
|
||||
### Object key
|
||||
|
||||
By default, the Alicloud OSS output binding will auto-generate a UUID as the object key.
|
||||
You can set the key with the following metadata:
|
||||
|
||||
```json
|
||||
{
|
||||
"data": "file content",
|
||||
"metadata": {
|
||||
"key": "my-key"
|
||||
},
|
||||
"operation": "create"
|
||||
}
|
||||
```
|
||||
|
||||
## Related links
|
||||
|
||||
- [Bindings building block]({{< ref bindings >}})
|
||||
- [How-To: Trigger application with input binding]({{< ref howto-triggers.md >}})
|
||||
- [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}})
|
||||
- [Bindings API reference]({{< ref bindings_api.md >}})
|
|
@ -30,12 +30,22 @@ spec:
|
|||
value: topic3
|
||||
- name: authRequired # Required. default: "true"
|
||||
value: "false"
|
||||
- name: saslUsername # Optional.
|
||||
- name: saslUsername # Optional.
|
||||
value: "user"
|
||||
- name: saslPassword # Optional.
|
||||
- name: saslPassword # Optional.
|
||||
value: "password"
|
||||
- name: maxMessageBytes # Optional.
|
||||
value: 1024
|
||||
```
|
||||
|
||||
- `topics` is a comma separated string of topics for an input binding.
|
||||
- `brokers` is a comma separated string of kafka brokers.
|
||||
- `consumerGroup` is a kafka consumer group to listen on.
|
||||
- `publishTopic` is the topic to publish for an output binding.
|
||||
- `authRequired` determines whether to use SASL authentication or not.
|
||||
- `saslUsername` is the SASL username for authentication. Only used if `authRequired` is set to - `"true"`.
|
||||
- `maxMessageBytes` is the maximum message size allowed for a single Kafka message. Default is 1024.
|
||||
|
||||
{{% alert title="Warning" color="warning" %}}
|
||||
The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}).
|
||||
{{% /alert %}}
|
||||
|
|
|
@ -28,6 +28,8 @@ spec:
|
|||
value: "adminuser"
|
||||
- name: saslPassword
|
||||
value: "KeFg23!"
|
||||
- name: maxMessageBytes
|
||||
value: 1024
|
||||
```
|
||||
|
||||
{{% alert title="Warning" color="warning" %}}
|
||||
|
@ -42,7 +44,27 @@ The above example uses secrets as plain strings. It is recommended to use a secr
|
|||
| authRequired | N | Enable authentication on the Kafka broker. Defaults to `"false"`. |`"true"`, `"false"`
|
||||
| saslUsername | N | Username used for authentication. Only required if authRequired is set to true. | `"adminuser"`
|
||||
| saslPassword | N | Password used for authentication. Can be `secretKeyRef` to use a secret reference. Only required if authRequired is set to true. Can be `secretKeyRef` to use a [secret reference]({{< ref component-secrets.md >}}) | `""`, `"KeFg23!"`
|
||||
| maxMessageBytes | N | The maximum message size allowed for a single Kafka message. Default is 1024. | `2048`
|
||||
|
||||
## Per-call metadata fields
|
||||
|
||||
### Partition Key
|
||||
|
||||
When invoking the Kafka pub/sub, its possible to provide an optional partition key by using the `metadata` query param in the request url.
|
||||
|
||||
The param name is `partitionKey`.
|
||||
|
||||
Example:
|
||||
|
||||
```shell
|
||||
curl -X POST http://localhost:3500/v1.0/publish/myKafka/myTopic?metadata.partitionKey=key1 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"data": {
|
||||
"message": "Hi"
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
## Create a Kafka instance
|
||||
{{< tabs "Self-Hosted" "Kubernetes">}}
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
---
|
||||
type: docs
|
||||
title: "How-To: Handle large http body requests"
|
||||
linkTitle: "Http request body size"
|
||||
weight: 6000
|
||||
description: "Configure http requests that are bigger than 4 MB"
|
||||
---
|
||||
|
||||
By default Dapr has a limit for the request body size which is set to 4 MB, however you can change this by defining `dapr.io/http-max-request-size` annotation or `--dapr-http-max-request-size` flag.
|
||||
|
||||
|
||||
### Self hosted
|
||||
|
||||
When running in self hosted mode, use the `--dapr-http-max-request-size` flag to configure Dapr to use non-default request body size:
|
||||
|
||||
```bash
|
||||
dapr run --dapr-http-max-request-size 16 node app.js
|
||||
```
|
||||
This tells Dapr to set maximum request body size to `16` MB.
|
||||
|
||||
|
||||
### Kubernetes
|
||||
|
||||
On Kubernetes, set the following annotations in your deployment YAML:
|
||||
```yaml
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: myapp
|
||||
namespace: default
|
||||
labels:
|
||||
app: myapp
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: myapp
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: myapp
|
||||
annotations:
|
||||
dapr.io/enabled: "true"
|
||||
dapr.io/app-id: "myapp"
|
||||
dapr.io/app-port: "8000"
|
||||
dapr.io/http-max-request-size: "16"
|
||||
...
|
||||
```
|
||||
|
||||
## Related links
|
||||
- [Dapr Kubernetes pod annotations spec]({{< ref kubernetes-annotations.md >}})
|
|
@ -14,4 +14,6 @@
|
|||
debug: false,
|
||||
});
|
||||
</script>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
<script src="/js/copy-code-button.js"></script>
|
|
@ -0,0 +1,49 @@
|
|||
function addCopyButtons(clipboard) {
|
||||
document.querySelectorAll('pre > code').forEach(function(codeBlock) {
|
||||
var button = document.createElement('button');
|
||||
button.className = 'copy-code-button';
|
||||
button.type = 'button';
|
||||
button.innerText = 'Copy';
|
||||
|
||||
button.addEventListener('click', function() {
|
||||
clipboard.writeText(codeBlock.textContent).then(
|
||||
function() {
|
||||
button.blur();
|
||||
|
||||
button.innerText = 'Copied!';
|
||||
setTimeout(function() {
|
||||
button.innerText = 'Copy';
|
||||
}, 2000);
|
||||
},
|
||||
function(error) {
|
||||
button.innerText = 'Error';
|
||||
console.error(error);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
var pre = codeBlock.parentNode;
|
||||
if (pre.parentNode.classList.contains('highlight')) {
|
||||
var highlight = pre.parentNode;
|
||||
highlight.parentNode.insertBefore(button, highlight);
|
||||
} else {
|
||||
pre.parentNode.insertBefore(button, pre);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (navigator && navigator.clipboard) {
|
||||
addCopyButtons(navigator.clipboard);
|
||||
} else {
|
||||
var script = document.createElement('script');
|
||||
script.src =
|
||||
'https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.7.0/clipboard-polyfill.promise.js';
|
||||
script.integrity = 'sha256-waClS2re9NUbXRsryKoof+F9qc1gjjIhc2eT7ZbIv94=';
|
||||
script.crossOrigin = 'anonymous';
|
||||
|
||||
script.onload = function() {
|
||||
addCopyButtons(clipboard);
|
||||
};
|
||||
|
||||
document.body.appendChild(script);
|
||||
}
|
Loading…
Reference in New Issue