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.