From f34497cedfc7e20eac7a37f4019bf3b0cbf12d36 Mon Sep 17 00:00:00 2001 From: Artur Souza Date: Wed, 26 May 2021 17:37:01 -0700 Subject: [PATCH] Document pubsub without cloudevent. (#1499) * Document pubsub without cloudevent. * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-overview.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-overview.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/reference/api/pubsub_api.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/reference/api/pubsub_api.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Add images + enhance subscribe example. * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Fix title for example * Update pubsub-overview.md * Update pubsub-raw.md * Update pubsub_api.md * Update howto-publish-subscribe.md * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Update raw pubsub scenarios images. * Note about subscription CRD and raw payload support. * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis * Update daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md Co-authored-by: Aaron Crawfis Co-authored-by: Aaron Crawfis Co-authored-by: Mark Fussell --- .../building-blocks/pubsub/pubsub-overview.md | 6 +- .../building-blocks/pubsub/pubsub-raw.md | 160 ++++++++++++++++++ .../content/en/reference/api/pubsub_api.md | 14 +- daprdocs/static/images/pubsub_publish_raw.png | Bin 0 -> 18624 bytes .../static/images/pubsub_subscribe_raw.png | Bin 0 -> 18694 bytes 5 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md create mode 100644 daprdocs/static/images/pubsub_publish_raw.png create mode 100644 daprdocs/static/images/pubsub_subscribe_raw.png diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-overview.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-overview.md index dbf10202e..41c9e215e 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-overview.md @@ -100,6 +100,9 @@ Dapr can set a timeout message on a per message basis, meaning that if the messa - Note: Message TTL can also be set for a given queue at the time of component creation. Look at the specific characteristic of the component that you are using. +### Communication with applications not using Dapr and CloudEvents +For scenarios where one application uses Dapr but another doesn't, CloudEvent wrapping can be disabled for a publisher or subscriber. This allows partial adoption of Dapr pubsub in applications that cannot adopt Dapr all at once. For more information read [how to use pubsub without CloudEvent]({{< ref pubsub-raw.md >}}). + ### Publish/Subscribe API The publish/subscribe API is located in the [API reference]({{< ref pubsub_api.md >}}). @@ -112,5 +115,6 @@ The publish/subscribe API is located in the [API reference]({{< ref pubsub_api.m * Try out the [Pub/Sub quickstart sample](https://github.com/dapr/quickstarts/tree/master/pub-sub) * Learn about [topic scoping]({{< ref pubsub-scopes.md >}}) * Learn about [message time-to-live (TTL)]({{< ref pubsub-message-ttl.md >}}) +* Learn about [pubsub without CloudEvent]({{< ref pubsub-raw.md >}}) * List of [pub/sub components]({{< ref supported-pubsub.md >}}) -* Read the [pub/sub API reference]({{< ref pubsub_api.md >}}) \ No newline at end of file +* Read the [pub/sub API reference]({{< ref pubsub_api.md >}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md new file mode 100644 index 000000000..30f2e22cb --- /dev/null +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md @@ -0,0 +1,160 @@ +--- +type: docs +title: "Pub/Sub without CloudEvents" +linkTitle: "Pub/Sub without CloudEvents" +weight: 7000 +description: "Use Pub/Sub without CloudEvents." +--- + +## Introduction + +Dapr uses CloudEvents to provide additional context to the event payload, enabling features like: +* Tracing +* Deduplication by message Id +* Content-type for proper deserialization of event's data + +For more information about CloudEvents, read the [CloudEvents specification](https://github.com/cloudevents/spec). + +When adding Dapr to your application, some services may still need to communicate via raw pub/sub messages not encapsulated in CloudEvents. This may be for compatibility reasons, or because some apps are not using Dapr. Dapr enables apps to publish and subscribe to raw events that are not wrapped in a CloudEvent. + +{{% alert title="Warning" color="warning" %}} +Not using CloudEvents disables support for tracing, event deduplication per messageId, content-type metadata, and any other features built using the CloudEvent schema. +{{% /alert %}} + +## Publishing raw messages + +Dapr apps are able to publish raw events to pub/sub topics without CloudEvent encapsulation, for compatibility with non-Dapr apps. + +Diagram showing how to publish with Dapr when subscriber does not use Dapr or CloudEvent + +To disable CloudEvent wrapping, set the `rawPayload` metadata to `true` as part of the publishing request. This allows subscribers to receive these messages without having to parse the CloudEvent schema. + +{{< tabs curl "Python SDK" "PHP SDK">}} + +{{% codetab %}} +```bash +curl -X "POST" http://localhost:3500/v1.0/publish/pubsub/TOPIC_A?metadata.rawPayload=true -H "Content-Type: application/json" -d '{"order-number": "345"}' +``` +{{% /codetab %}} + +{{% codetab %}} +```python +from dapr.clients import DaprClient + +with DaprClient() as d: + req_data = { + 'order-number': '345' + } + # Create a typed message with content type and body + resp = d.publish_event( + pubsub_name='pubsub', + topic='TOPIC_A', + data=json.dumps(req_data), + metadata=( + ('rawPayload', 'true') + ) + ) + # Print the request + print(req_data, flush=True) +``` +{{% /codetab %}} + +{{% codetab %}} + +```php +run(function(\DI\FactoryInterface $factory) { + $publisher = $factory->make(\Dapr\PubSub\Publish::class, ['pubsub' => 'pubsub']); + $publisher->topic('TOPIC_A')->publish('data', ['rawPayload' => 'true']); +}); +``` + +{{% /codetab %}} + +{{< /tabs >}} + +## Subscribing to raw messages + +Dapr apps are also able to subscribe to raw events coming from existing pub/sub topics that do not use CloudEvent encapsulation. + +Diagram showing how to subscribe with Dapr when publisher does not use Dapr or CloudEvent + + +### Programmatically subscribe to raw events + +When subscribing programmatically, add the additional metadata entry for `rawPayload` so the Dapr sidecar automatically wraps the payloads into a CloudEvent that is compatible with current Dapr SDKs. + +{{< tabs "Python" "PHP SDK" >}} + +{{% codetab %}} + +```python +import flask +from flask import request, jsonify +from flask_cors import CORS +import json +import sys + +app = flask.Flask(__name__) +CORS(app) + +@app.route('/dapr/subscribe', methods=['GET']) +def subscribe(): + subscriptions = [{'pubsubname': 'pubsub', + 'topic': 'deathStarStatus', + 'route': 'dsstatus', + 'metadata': { + 'rawPayload': 'true', + } }] + return jsonify(subscriptions) + +@app.route('/dsstatus', methods=['POST']) +def ds_subscriber(): + print(request.json, flush=True) + return json.dumps({'success':True}), 200, {'ContentType':'application/json'} + +app.run() +``` + +{{% /codetab %}} +{{% codetab %}} + +```php + $builder->addDefinitions(['dapr.subscriptions' => [ + new \Dapr\PubSub\Subscription(pubsubname: 'pubsub', topic: 'deathStarStatus', route: '/dsstatus', metadata: [ 'rawPayload' => 'true'] ), +]])); + +$app->post('/dsstatus', function( + #[\Dapr\Attributes\FromBody] + \Dapr\PubSub\CloudEvent $cloudEvent, + \Psr\Log\LoggerInterface $logger + ) { + $logger->alert('Received event: {event}', ['event' => $cloudEvent]); + return ['status' => 'SUCCESS']; + } +); + +$app->start(); +``` +{{% /codetab %}} + +{{< /tabs >}} + + +## Declaratively subscribe to raw events + +Subscription Custom Resources Definitions (CRDs) do not currently contain metadata attributes ([issue #3225](https://github.com/dapr/dapr/issues/3225)). At this time subscribing to raw events can only be done through programmatic subscriptions. + +## Related links + +- Learn more about [how to publish and subscribe]({{< ref howto-publish-subscribe.md >}}) +- List of [pub/sub components]({{< ref supported-pubsub >}}) +- Read the [API reference]({{< ref pubsub_api.md >}}) diff --git a/daprdocs/content/en/reference/api/pubsub_api.md b/daprdocs/content/en/reference/api/pubsub_api.md index 3ed50cac1..63a15f59d 100644 --- a/daprdocs/content/en/reference/api/pubsub_api.md +++ b/daprdocs/content/en/reference/api/pubsub_api.md @@ -60,6 +60,7 @@ Metadata can be sent via query parameters in the request's URL. It must be prefi Parameter | Description --------- | ----------- metadata.ttlInSeconds | the number of seconds for the message to expire as [described here]({{< ref pubsub-message-ttl.md >}}) +metadata.rawPayload | boolean to determine if Dapr should publish the event without wrapping it as CloudEvent as [described here]({{< ref pubsub-raw.md >}}) > Additional metadata parameters are available based on each pubsub component. @@ -92,13 +93,24 @@ Example: { "pubsubname": "pubsub", "topic": "newOrder", - "route": "/orders" + "route": "/orders", + "metadata": { + "rawPayload": "true", + } } ] ``` > Note, all subscription parameters are case-sensitive. +#### Metadata + +Optionally, metadata can be sent via the request body. + +Parameter | Description +--------- | ----------- +rawPayload | boolean to subscribe to events that do not comply with CloudEvent specification, as [described here]({{< ref pubsub-raw.md >}}) + ### Provide route(s) for Dapr to deliver topic events In order to deliver topic events, a `POST` call will be made to user code with the route specified in the subscription response. diff --git a/daprdocs/static/images/pubsub_publish_raw.png b/daprdocs/static/images/pubsub_publish_raw.png new file mode 100644 index 0000000000000000000000000000000000000000..147445ca36b8cbe0b15cf789c2db45d482296199 GIT binary patch literal 18624 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 KEx3ID+5Z8am9tC$ literal 0 HcmV?d00001 diff --git a/daprdocs/static/images/pubsub_subscribe_raw.png b/daprdocs/static/images/pubsub_subscribe_raw.png new file mode 100644 index 0000000000000000000000000000000000000000..149e1eefa5e61cd73ba08c85196c7f51cf33f028 GIT binary patch literal 18694 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 literal 0 HcmV?d00001