mirror of https://github.com/dapr/docs.git
Add priority for rabbitmq (#3282)
* add priority for rabbitmq Signed-off-by: yaron2 <schneider.yaron@live.com> * update subscription version Signed-off-by: yaron2 <schneider.yaron@live.com> --------- Signed-off-by: yaron2 <schneider.yaron@live.com>
This commit is contained in:
parent
eeccdd1261
commit
d8672a9aeb
|
|
@ -183,14 +183,15 @@ Setting `exchangeKind` to `"topic"` uses the topic exchanges, which are commonly
|
|||
Messages with a `routing key` will be routed to one or many queues based on the `routing key` defined in the metadata when subscribing.
|
||||
The routing key is defined by the `routingKey` metadata. For example, if an app is configured with a routing key `keyA`:
|
||||
|
||||
```
|
||||
apiVersion: dapr.io/v1alpha1
|
||||
```yaml
|
||||
apiVersion: dapr.io/v2alpha1
|
||||
kind: Subscription
|
||||
metadata:
|
||||
name: order_pub_sub
|
||||
name: orderspubsub
|
||||
spec:
|
||||
topic: B
|
||||
route: /B
|
||||
routes:
|
||||
default: /B
|
||||
pubsubname: pubsub
|
||||
metadata:
|
||||
routingKey: keyA
|
||||
|
|
@ -210,14 +211,15 @@ client.PublishEvent(context.Background(), "pubsub", "B", []byte("this is another
|
|||
Multiple routing keys can be separated by commas.
|
||||
The example below binds three `routingKey`: `keyA`, `keyB`, and `""`. Note the binding method of empty keys.
|
||||
|
||||
```
|
||||
apiVersion: dapr.io/v1alpha1
|
||||
```yaml
|
||||
apiVersion: dapr.io/v2alpha1
|
||||
kind: Subscription
|
||||
metadata:
|
||||
name: order_pub_sub
|
||||
name: orderspubsub
|
||||
spec:
|
||||
topic: B
|
||||
route: /B
|
||||
routes:
|
||||
default: /B
|
||||
pubsubname: pubsub
|
||||
metadata:
|
||||
routingKey: keyA,keyB,
|
||||
|
|
@ -226,6 +228,168 @@ spec:
|
|||
|
||||
For more information see [rabbitmq exchanges](https://www.rabbitmq.com/tutorials/amqp-concepts.html#exchanges).
|
||||
|
||||
## Use priority queues
|
||||
|
||||
Dapr supports RabbitMQ [priority queues](https://www.rabbitmq.com/priority.html). To set a priority for a queue, use the `maxPriority` topic subscription metadata.
|
||||
|
||||
### Declarative priority queue example
|
||||
|
||||
```yaml
|
||||
apiVersion: dapr.io/v2alpha1
|
||||
kind: Subscription
|
||||
metadata:
|
||||
name: pubsub
|
||||
spec:
|
||||
topic: checkout
|
||||
routes:
|
||||
default: /orders
|
||||
pubsubname: order-pub-sub
|
||||
metadata:
|
||||
maxPriority: 3
|
||||
```
|
||||
|
||||
### Programmatic priority queue example
|
||||
|
||||
{{< tabs Python JavaScript Go>}}
|
||||
|
||||
{{% codetab %}}
|
||||
|
||||
```python
|
||||
@app.route('/dapr/subscribe', methods=['GET'])
|
||||
def subscribe():
|
||||
subscriptions = [
|
||||
{
|
||||
'pubsubname': 'pubsub',
|
||||
'topic': 'checkout',
|
||||
'routes': {
|
||||
'default': '/orders'
|
||||
},
|
||||
'metadata': {'maxPriority': '3'}
|
||||
}
|
||||
]
|
||||
return jsonify(subscriptions)
|
||||
```
|
||||
|
||||
{{% /codetab %}}
|
||||
|
||||
{{% codetab %}}
|
||||
|
||||
```javascript
|
||||
const express = require('express')
|
||||
const bodyParser = require('body-parser')
|
||||
const app = express()
|
||||
app.use(bodyParser.json({ type: 'application/*+json' }));
|
||||
|
||||
const port = 3000
|
||||
|
||||
app.get('/dapr/subscribe', (req, res) => {
|
||||
res.json([
|
||||
{
|
||||
pubsubname: "pubsub",
|
||||
topic: "checkout",
|
||||
routes: {
|
||||
default: '/orders'
|
||||
},
|
||||
metadata: {
|
||||
maxPriority: '3'
|
||||
}
|
||||
}
|
||||
]);
|
||||
})
|
||||
```
|
||||
|
||||
{{% /codetab %}}
|
||||
|
||||
{{% codetab %}}
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
const appPort = 3000
|
||||
|
||||
type subscription struct {
|
||||
PubsubName string `json:"pubsubname"`
|
||||
Topic string `json:"topic"`
|
||||
Metadata map[string]string `json:"metadata,omitempty"`
|
||||
Routes routes `json:"routes"`
|
||||
}
|
||||
|
||||
type routes struct {
|
||||
Rules []rule `json:"rules,omitempty"`
|
||||
Default string `json:"default,omitempty"`
|
||||
}
|
||||
|
||||
// This handles /dapr/subscribe
|
||||
func configureSubscribeHandler(w http.ResponseWriter, _ *http.Request) {
|
||||
t := []subscription{
|
||||
{
|
||||
PubsubName: "pubsub",
|
||||
Topic: "checkout",
|
||||
Routes: routes{
|
||||
Default: "/orders",
|
||||
},
|
||||
Metadata: map[string]string{
|
||||
"maxPriority": "3"
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
json.NewEncoder(w).Encode(t)
|
||||
}
|
||||
```
|
||||
{{% /codetab %}}
|
||||
|
||||
{{< /tabs >}}
|
||||
|
||||
### Setting a priority when publishing a message
|
||||
|
||||
To set a priority on a message, add the publish metadata key `maxPriority` to the publish endpoint or SDK method.
|
||||
|
||||
{{< tabs "HTTP API (Bash)" Python JavaScript Go>}}
|
||||
|
||||
{{% codetab %}}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:3601/v1.0/publish/order-pub-sub/orders?metadata.maxPriority=3 -H "Content-Type: application/json" -d '{"orderId": "100"}'
|
||||
```
|
||||
|
||||
{{% /codetab %}}
|
||||
|
||||
{{% codetab %}}
|
||||
|
||||
```python
|
||||
with DaprClient() as client:
|
||||
result = client.publish_event(
|
||||
pubsub_name=PUBSUB_NAME,
|
||||
topic_name=TOPIC_NAME,
|
||||
data=json.dumps(orderId),
|
||||
data_content_type='application/json',
|
||||
metadata= { 'maxPriority': '3' })
|
||||
```
|
||||
|
||||
{{% /codetab %}}
|
||||
|
||||
{{% codetab %}}
|
||||
|
||||
```javascript
|
||||
await client.pubsub.publish(PUBSUB_NAME, TOPIC_NAME, orderId, { 'maxPriority': '3' });
|
||||
```
|
||||
|
||||
{{% /codetab %}}
|
||||
|
||||
{{% codetab %}}
|
||||
|
||||
```go
|
||||
client.PublishEvent(ctx, PUBSUB_NAME, TOPIC_NAME, []byte(strconv.Itoa(orderId)), map[string]string{"maxPriority": "3"})
|
||||
```
|
||||
{{% /codetab %}}
|
||||
|
||||
{{< /tabs >}}
|
||||
|
||||
## Related links
|
||||
|
||||
- [Basic schema for a Dapr component]({{< ref component-schema >}}) in the Related links section
|
||||
|
|
|
|||
Loading…
Reference in New Issue