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.
|
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`:
|
The routing key is defined by the `routingKey` metadata. For example, if an app is configured with a routing key `keyA`:
|
||||||
|
|
||||||
```
|
```yaml
|
||||||
apiVersion: dapr.io/v1alpha1
|
apiVersion: dapr.io/v2alpha1
|
||||||
kind: Subscription
|
kind: Subscription
|
||||||
metadata:
|
metadata:
|
||||||
name: order_pub_sub
|
name: orderspubsub
|
||||||
spec:
|
spec:
|
||||||
topic: B
|
topic: B
|
||||||
route: /B
|
routes:
|
||||||
|
default: /B
|
||||||
pubsubname: pubsub
|
pubsubname: pubsub
|
||||||
metadata:
|
metadata:
|
||||||
routingKey: keyA
|
routingKey: keyA
|
||||||
|
|
@ -210,14 +211,15 @@ client.PublishEvent(context.Background(), "pubsub", "B", []byte("this is another
|
||||||
Multiple routing keys can be separated by commas.
|
Multiple routing keys can be separated by commas.
|
||||||
The example below binds three `routingKey`: `keyA`, `keyB`, and `""`. Note the binding method of empty keys.
|
The example below binds three `routingKey`: `keyA`, `keyB`, and `""`. Note the binding method of empty keys.
|
||||||
|
|
||||||
```
|
```yaml
|
||||||
apiVersion: dapr.io/v1alpha1
|
apiVersion: dapr.io/v2alpha1
|
||||||
kind: Subscription
|
kind: Subscription
|
||||||
metadata:
|
metadata:
|
||||||
name: order_pub_sub
|
name: orderspubsub
|
||||||
spec:
|
spec:
|
||||||
topic: B
|
topic: B
|
||||||
route: /B
|
routes:
|
||||||
|
default: /B
|
||||||
pubsubname: pubsub
|
pubsubname: pubsub
|
||||||
metadata:
|
metadata:
|
||||||
routingKey: keyA,keyB,
|
routingKey: keyA,keyB,
|
||||||
|
|
@ -226,6 +228,168 @@ spec:
|
||||||
|
|
||||||
For more information see [rabbitmq exchanges](https://www.rabbitmq.com/tutorials/amqp-concepts.html#exchanges).
|
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
|
## Related links
|
||||||
|
|
||||||
- [Basic schema for a Dapr component]({{< ref component-schema >}}) in the Related links section
|
- [Basic schema for a Dapr component]({{< ref component-schema >}}) in the Related links section
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue