import T1DiagramToC from '@site/src/components/Tutorials/T1DiagramToC.md';
import T2DiagramToC from '@site/src/components/Tutorials/T2DiagramToC.md';
import T3DiagramToC from '@site/src/components/Tutorials/T3DiagramToC.md';
import T4DiagramToC from '@site/src/components/Tutorials/T4DiagramToC.md';
import T5DiagramToC from '@site/src/components/Tutorials/T5DiagramToC.md';
import T6DiagramToC from '@site/src/components/Tutorials/T6DiagramToC.md';
import T1DiagramStreamToC from '@site/src/components/Tutorials/T1DiagramStreamToC.md';
import T2DiagramStreamToC from '@site/src/components/Tutorials/T2DiagramStreamToC.md';
These tutorials cover the basics of creating messaging
applications using RabbitMQ.
You need to have the RabbitMQ server installed to go through the tutorials,
please see the installation guide or use the community Docker image .
Executable versions of these tutorials are open source ,
as is this website .
There are two groups of tutorials:
:::info
This tutorials target RabbitMQ 4.x.
:::
This section covers the default RabbitMQ protocol, AMQP 0-9-1.
## 1. "Hello World!"
The simplest thing that does *something*
<T1DiagramToC/>
* [Python](tutorials/tutorial-one-python)
* [Java](tutorials/tutorial-one-java)
* [Ruby](tutorials/tutorial-one-ruby)
* [PHP](tutorials/tutorial-one-php)
* [C#](tutorials/tutorial-one-dotnet)
* [JavaScript](tutorials/tutorial-one-javascript)
* [Go](tutorials/tutorial-one-go)
* [Elixir](tutorials/tutorial-one-elixir)
* [Objective-C](tutorials/tutorial-one-objectivec)
* [Swift](tutorials/tutorial-one-swift)
* [Spring AMQP](tutorials/tutorial-one-spring-amqp)
## 2. Work Queues
Distributing tasks among workers (the <a href="http://www.enterpriseintegrationpatterns.com/patterns/messaging/CompetingConsumers.html">competing consumers pattern</a>)
<T2DiagramToC/>
* [Python](tutorials/tutorial-two-python)
* [Java](tutorials/tutorial-two-java)
* [Ruby](tutorials/tutorial-two-ruby)
* [PHP](tutorials/tutorial-two-php)
* [C#](tutorials/tutorial-two-dotnet)
* [JavaScript](tutorials/tutorial-two-javascript)
* [Go](tutorials/tutorial-two-go)
* [Elixir](tutorials/tutorial-two-elixir)
* [Objective-C](tutorials/tutorial-two-objectivec)
* [Swift](tutorials/tutorial-two-swift)
* [Spring AMQP](tutorials/tutorial-two-spring-amqp)
## 3. Publish/Subscribe
Sending messages to many consumers at once
<T3DiagramToC/>
* [Python](tutorials/tutorial-three-python)
* [Java](tutorials/tutorial-three-java)
* [Ruby](tutorials/tutorial-three-ruby)
* [PHP](tutorials/tutorial-three-php)
* [C#](tutorials/tutorial-three-dotnet)
* [JavaScript](tutorials/tutorial-three-javascript)
* [Go](tutorials/tutorial-three-go)
* [Elixir](tutorials/tutorial-three-elixir)
* [Objective-C](tutorials/tutorial-three-objectivec)
* [Swift](tutorials/tutorial-three-swift)
* [Spring AMQP](tutorials/tutorial-three-spring-amqp)
## 4. Routing
Receiving messages selectively
<T4DiagramToC/>
* [Python](tutorials/tutorial-four-python)
* [Java](tutorials/tutorial-four-java)
* [Ruby](tutorials/tutorial-four-ruby)
* [PHP](tutorials/tutorial-four-php)
* [C#](tutorials/tutorial-four-dotnet)
* [JavaScript](tutorials/tutorial-four-javascript)
* [Go](tutorials/tutorial-four-go)
* [Elixir](tutorials/tutorial-four-elixir)
* [Objective-C](tutorials/tutorial-four-objectivec)
* [Swift](tutorials/tutorial-four-swift)
* [Spring AMQP](tutorials/tutorial-four-spring-amqp)
## 5. Topics
Receiving messages based on a pattern (topics)
<T5DiagramToC/>
* [Python](tutorials/tutorial-five-python)
* [Java](tutorials/tutorial-five-java)
* [Ruby](tutorials/tutorial-five-ruby)
* [PHP](tutorials/tutorial-five-php)
* [C#](tutorials/tutorial-five-dotnet)
* [JavaScript](tutorials/tutorial-five-javascript)
* [Go](tutorials/tutorial-five-go)
* [Elixir](tutorials/tutorial-five-elixir)
* [Objective-C](tutorials/tutorial-five-objectivec)
* [Swift](tutorials/tutorial-five-swift)
* [Spring AMQP](tutorials/tutorial-five-spring-amqp)
## 6. RPC
<a href="http://www.enterpriseintegrationpatterns.com/patterns/messaging/RequestReply.html">Request/reply pattern</a> example
<T6DiagramToC/>
* [Python](tutorials/tutorial-six-python)
* [Java](tutorials/tutorial-six-java)
* [Ruby](tutorials/tutorial-six-ruby)
* [PHP](tutorials/tutorial-six-php)
* [C#](tutorials/tutorial-six-dotnet)
* [JavaScript](tutorials/tutorial-six-javascript)
* [Go](tutorials/tutorial-six-go)
* [Elixir](tutorials/tutorial-six-elixir)
* [Spring AMQP](tutorials/tutorial-six-spring-amqp)
## 7. Publisher Confirms
Reliable publishing with publisher confirms
* [Java](tutorials/tutorial-seven-java)
* [C#](tutorials/tutorial-seven-dotnet)
* [PHP](tutorials/tutorial-seven-php)
Once you have been through the tutorials (or if you want to
skip ahead), you may wish to read an
Introduction to RabbitMQ Concepts
and take a look at the Compatibility and Conformance page
to find relevant resources to learn more about AMQP 1.0 and AMQP 0-9-1,
the two core protocols implemented by RabbitMQ.
This section covers RabbitMQ streams .
## 1. "Hello World!"
The simplest thing that does *something*
<T1DiagramStreamToC/>
* [Java](tutorials/tutorial-one-java-stream)
* [C#](tutorials/tutorial-one-dotnet-stream)
* [Go](tutorials/tutorial-one-go-stream)
* [Python](tutorials/tutorial-one-python-stream)
* [Rust](tutorials/tutorial-one-rust-stream)
* [Node.js](tutorials/tutorial-one-javascript-stream)
## 2. Offset Tracking
Keep track of message processing
<T2DiagramStreamToC/>
* [Java](tutorials/tutorial-two-java-stream)
* [C#](tutorials/tutorial-two-dotnet-stream)
* [Go](tutorials/tutorial-two-go-stream)
* [Python](tutorials/tutorial-two-python-stream)
* [Rust](tutorials/tutorial-two-rust-stream)
* [Node.js](tutorials/tutorial-two-javascript-stream)
Stream Overview and Blog Posts
Once you have been through the tutorials (or if you want to
skip ahead), you may wish to read the
RabbitMQ stream documentation
and browse our
stream blog posts .
If you have any questions or comments regarding RabbitMQ, feel free to
ask them on GitHub Discussion or
RabbitMQ community Discord server .
Tutorials in Other Languages
The tutorials here use a number of popular technologies,
however, there are ports available for
many more languages and client libraries, for example:
We also maintain a list of community-developed clients and developer tools
for various protocols RabbitMQ supports.