DAS_2024_1/kalyshev_yan_lab_4/spring-amqp/README.md

109 lines
4.0 KiB
Markdown
Raw Normal View History

2024-11-08 01:04:56 +04:00
# RabbitMQ Tutorial Using Spring AMQP
This project implements each of the [6 RabbitMQ Tutorials][1] using Spring AMQP.
It is a CLI app that uses Spring Profiles to control its behavior. Each tutorial is a trio of classes:
sender, receiver, and configuration.
[1]: https://www.rabbitmq.com/getstarted.html
## Prerequisites
These tutorials assume RabbitMQ is [installed](https://rabbitmq.com/download.html) and running
on `localhost` using the standard port (`5672`). In case you use
a different host, port or credentials, connections settings would require adjusting.
## Usage
These tutorials use Maven. To build them run
```
./mvnw clean package
```
The app uses Spring Profiles to control what tutorial it's running, and if it's a
Sender or Receiver. Choose which tutorial to run by using these profiles:
- {tut1|hello-world},{sender|receiver}
- {tut2|work-queues},{sender|receiver}
- {tut3|pub-sub|publish-subscribe},{sender|receiver}
- {tut4|routing},{sender|receiver}
- {tut5|topics},{sender|receiver}
- {tut6|rpc},{client|server}
After building with maven, run the app however you like to run boot apps.
For example:
```
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=work-queues,sender
```
will run the publisher part of tutorial 2 (Work Queues).
For tutorials 1-5, run the consumer (receiver) followed by the publisher (sender):
```
# shell 1
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=work-queues,receiver
# shell 2
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=work-queues,sender
```
For tutorial 6, run the server followed by the client.
You can find more usage instructions by running the following command:
```
java -jar target/rabbitmq-tutorials.jar
```
This will display the following message:
```
This app uses Spring Profiles to control its behavior.
Options are:
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=hello-world,receiver
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=hello-world,sender
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=work-queues,receiver
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=work-queues,sender
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=pub-sub,receiver
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=pub-sub,sender
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=routing,receiver
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=routing,sender
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=topics,receiver
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=topics,sender
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=rpc,client
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=rpc,server
```
## Configuration
When running receivers/servers it's useful to set the duration the app runs to a longer time. Do this by setting
the `tutorial.client.duration` property.
```
java -jar target/rabbitmq-tutorials.jar --spring.profiles.active=tut2,receiver,remote --tutorial.client.duration=60000
```
By default, Spring AMQP uses localhost to connect to RabbitMQ. In the
sample, the `remote` profile causes Spring to load the properties in
`application-remote.yml` that are used for testing with a non-local
server. Set your own properties in the one in the project, or provide
your own on the command line when you run it.
To use to a remote RabbitMQ installation set the following properties:
```
spring:
rabbitmq:
host: <rabbitmq-server>
username: <tutorial-user>
password: <tutorial-user>
```
To use this at runtime create a file called `application-remote.yml` (or properties) and set the properties in there. Then set the
remote profile as in the example above. See the [Spring Boot](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/)
and [Spring AMQP documentation](https://docs.spring.io/spring-amqp/reference/html/) for more information on setting application
properties and AMQP properties specifically.