# Introduction

BullMQ is based in 4 classes that together can be used to resolve many different problems. These classes are [***Queue***](https://api.docs.bullmq.io/classes/v5.Queue.html), [***Worker***](https://api.docs.bullmq.io/classes/v5.Worker.html), [***QueueEvents***](https://api.docs.bullmq.io/classes/v5.QueueEvents.html) and [***FlowProducer***](https://api.docs.bullmq.io/classes/v5.FlowProducer.html).

The first class you should know about is the *Queue* class. This class represents a queue and can be used for adding ***jobs*** to the queue as well as some other basic manipulation such as pausing, cleaning or getting data from the queue.

Jobs in BullMQ are basically a user created data structure that can be stored in the queue. Jobs are processed by ***workers***. A *Worker* is the second class you should be aware about. Workers are instances capable of processing jobs. You can have many workers, either running in the same Node.js process, or in separate processes as well as in different machines. They will all consume jobs from the queue and mark the jobs as completed or failed.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.bullmq.io/guide/introduction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
