Отправка сообщений в мультитенантном приложении с использованием Spring Boot WebSocket RabbitMQ - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в RabbitMQ и должен понять, как отправить сообщение указанному c пользователю specfi c. Мы используем Spring Boot, WebSocket, RabbitMQ и Angular. У нас есть мультитенантное приложение, в котором зарегистрировано несколько компаний, и в каждой компании есть несколько пользователей.

В настоящее время я могу отправить сообщение указанному c пользователю, используя / queue / user но я хочу отправить сообщение пользователю, например / queue / {company} / user .

Я понимаю, что ретранслятор Stomp Broker имеет конечные точки, такие как "/ queue", "/ topi c "," / exchange "," /amq/queue".

Можно ли создать определенные компанией очереди c и в этой компании specfi c очередь, мне нужно отправьте сообщение пользователя specfi c.

Ниже приведена моя рабочая конфигурация для сообщений пользователя c:

WebSocketConfiguration. java

@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
    stompEndpointRegistry.addEndpoint("/notification").setAllowedOrigins("*").withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {

    registry.enableStompBrokerRelay(/queue).setRelayHost(localhost).setRelayPort(61613)
            .setClientLogin(guest).setClientPasscode(guest);
    registry.setApplicationDestinationPrefixes(/app);
    registry.setUserDestinationPrefix(/user);
}

Класс отправки сообщений :

private final SimpMessagingTemplate simpMessagingTemplate;

public NotificationServiceImpl(SimpMessagingTemplate simpMessagingTemplate) {
    this.simpMessagingTemplate = simpMessagingTemplate;
}

@Override
public void notify(Notification notification, List<String> usernames) {
    simpMessagingTemplate.convertAndSend("/queue/user" + username, notification);
}

Angular Код:

const socket = new SockJS('http://localhost:9090/notification');
this.stompClient = Stomp.over(socket);

const _this = this;
this.stompClient.connect({}, function (frame) {
  _this.setConnected(true);
  console.log('Connected: ' + frame);

  _this.stompClient.subscribe('/queue/userjohndoe', function (notify) {
    _this.showGreeting(JSON.parse(notify.body).notificationMessage);
  });
});
...