URL Groups
Sending messages to a single endpoint and not having to worry about retries is already quite useful, but we also added the concept of URL Groups to QStash.
In short, a URL Group is just a namespace where you can publish messages to, the same way as publishing a message to an endpoint directly.
After creating a URL Group, you can create one or multiple endpoints. An endpoint is defined by a publicly available URL where the request will be sent to each endpoint after it is published to the URL Group.
When you publish a message to a URL Group, it will be fanned out and sent to all the subscribed endpoints.
When should I use URL Groups?
URL Groups decouple your message producers from consumers by grouping one or more endpoints into a single namespace.
Here’s an example: You have a serverless function which is invoked with each
purchase in your e-commerce site. You want to send email to the customer after
the purchase. Inside the function, you submit the URL api/sendEmail
to the
QStash. Later, if you want to send a Slack notification, you need to update the
serverless function adding another call to QStash to submit
api/sendNotification
. In this example, you need to update and redeploy the
Serverless function at each time you change (or add) the endpoints.
If you create a URL Group product-purchase
and produce messages to that URL Group in
the function, then you can add or remove endpoints by only updating the URL Group.
URL Groups give you freedom to modify endpoints without touching the backend
implementation.
Check here to learn how to publish to URL Groups.
How URL Groups work
When you publish a message to a URL Group, we will enqueue a unique task for each subscribed endpoint and guarantee successful delivery to each one of them.
Consider this scenario: You have a URL Group and 3 endpoints that are subscribed to it. Now when you publish a message to the URL Group, internally we will create a task for each subscribed endpoint and handle all retry mechanism isolated from each other.
How to create a URL Group
Please refer to the howto here.