Я новичок в 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);
});
});