DAS_2024_1/kalyshev_yan_lab_4/spring-amqp/README.md
2024-11-08 01:04:56 +04:00

4.0 KiB

RabbitMQ Tutorial Using Spring AMQP

This project implements each of the 6 RabbitMQ Tutorials 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.

Prerequisites

These tutorials assume RabbitMQ is installed 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 and Spring AMQP documentation for more information on setting application properties and AMQP properties specifically.