Java Message Service
JMS to zbiór interfejsów umożlwiający przesyłanie komunikatów. Przykładem aplikacji wykorzystującej JMS może być chat, w ramach którego JMS pozwala na dostarczanie komunikatów między aplikacjami. Analogicznie JMS można wykorzystać w aplikacjach typu Slack, poczta.
Message Broker
Message Broker to oprogramowanie pośredniczące w wymianie komunikatów pomiędzy dwoma lub większą ilością aplikacji klienckich.
W tym przykładzie zostanie zaprezentowany RabbitMQ jako przykład Message Broker’a.
Konfiguracja Message Brokera
Brokera można pobrać i zainstalować z oficjalnej strony https://www.rabbitmq.com
Alternatywną jest uruchomienie obrazu doker wykonując polecenie:
docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
Powyższe polecenie pozwala uruchomić Message Brokera wraz z panelem administracyjnym. Panel administracyjny uruchamia się na porcie 15672.
Domyślny login i hasło do panelu to guest/guest.

Panel administracyjny umożliwia sprawdzenie wiadomości umieszczonych w kolejce, aplikacji klienckich podłączonych do brokera oraz dostarcza wielu innych informacji.
W zakładce Queue należy utworzyć kolejkę w której będziemy mogli umieszczać wiadomości w tym przykładzie nazwą dla kolejki jest eggs.
Aplikacje klienckie
Do stworzenia aplikacji umieszczającej oraz odczytującej wiadomości z kolejki zostanie wykorzystany Spring Boot. Musi on mieć zależność do:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
Aby mieć możliwość wysyłania i odczytywania wiadomości należy posługiwać się instancja klasy RabbitTemplate. W Spring Boot instancja tej klasy zostanie utworzona automatycznie na podstawie domyślnej konfiguracji – port:5672, user:guest, password: guest.
Jeśli chcemy nadpisać domyślną konfiguracje to należy zrealizować to w pliku application.properties np:
spring.rabbitmq.username=user spring.rabbitmq.password=pass spring.rabbitmq.port=44444
Aplikacja publikująca
Przykład aplikacji, która publikuje wiadomości w kolejce może wyglądać następująco:
@RestController
public class PublisherMq {
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping("/addMessage")
public String get(@RequestParam String message) {
rabbitTemplate.convertAndSend("eggs", message);
return "sent";
}
}
Metoda convertAndSend umożliwia zamianę wiadomości na postać tekstową. Pierwszy parametr to nazwa kolejki w którym ma zostać umieszczona wiadomość, natomiast drugi parametr to sama wiadomość.
Aplikacja Konsumująca
@RestController
public class ClientMq {
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping("/receiveMessage")
public String get() {
Object message = rabbitTemplate.receiveAndConvert("eggs");
return message.toString();
}
}
Aplikacja kliencka działa na podobnej zasadzie. Tutaj wykorzystuje się metodę receiveAndConvert, która w parametrze przyjmuje kolejkę, z której ma zostać wczytana wiadomość. Zostanie przeczytana pierwsza wiadomość jaka została umieszczona w kolejce.
Wideo
Materiał, na którym prezentuje jak od początku skonfigurować RabbitMQ, oraz pokazuje jej szersze możliwości w praktyce znajdziesz w materiale wideo:
Szkolenia live dla developerów • praktyczna wiedza, realne case’y, zero lania wody 

