13 Ocak 2021 Çarşamba

SpringWebSocket STOMP Broker Kullanımı

Giriş
SpringBoot, basit bir STOMP Broker olarak işlev görebilir. Açıklaması şöyle
When using Spring’s STOMP support, the Spring WebSocket application acts as the STOMP broker to clients. Messages are routed to @Controller message-handling methods or to a simple, in-memory broker that keeps track of subscriptions and broadcasts messages to subscribed users. You can also configure Spring to work with a dedicated STOMP broker (e.g. RabbitMQ, ActiveMQ, etc) for the actual broadcasting of messages. In that case Spring maintains TCP connections to the broker, relays messages to it, and also passes messages from it down to connected WebSocket clients. Thus Spring web applications can rely on unified HTTP-based security, common validation, and a familiar programming model message-handling work.
1. In-Memory Broker Başlatılır
WebSocketMessageBrokerConfigurer arayüzünden kalıtan bir sınıf kodlanır ve bu sınıfa @Configuration + @EnableWebSocketMessageBroker anotasyonları eklenir

Bu sınıf STOMP istemcisinin bağlanacağı adresi ve kuyruk isimlerini belirtir.

2. STOMP Mesajları Gönderme
STOMP mesajları göndermek için SimpMessagingTemplate kullanılır. Belirtilen kuyruğa mesaj gönderilir. Kuyruk "/topic" şeklinde başlıyorsa, bu kuyruğu dinleyen tüm abonelere gönderilir.

3. STOMP Mesajları Alma
Eğer bir istemci tarafından gönderilen mesajları almak istiyorsak @MessageMapping anotasyonu ile işaretli bir metod yazmak gerekir. Bu mesajı diğer abonelere de yaymak istersek ilave olarak @SendTo anotasyonu ile hangi "topic" veya "queue" ya yönlendirileceğini de belirtebiliriz.

4. İstemci Tarafı
SockJS kullanarak İstemic tarafı kodlanır

Örnek
SimpMessagingTemplate sınıfının convertAndSend() metodu belirtilen topic'i dinleyen herkese mesajı gönderir. Mesaj JSON olarak gönderilir. Mesajın JSON olarak gönderilmesinin sebebi sanırım @EnableWebSocketMessageBroker anotasyonunun kullanılması
@Component
public class RabbitMQListener {
  @Autowired
  private SimpMessagingTemplate messagingTemplate;

  @RabbitListener(queues = "${spring.rabbitmq.queueName}")
  public void receive(Foo message){
    messagingTemplate.convertAndSend("/topic.socket.rabbit", message);
  }
}



Hiç yorum yok:

Yorum Gönder