JavaLive

Spring Boot #18 – Java Message Service i RabbitMQ

Spring Boot

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:

Tags:
Show Buttons
Hide Buttons