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: