Я новичок в RabbitMQ и Spring, и я разрабатываю чат, в котором пользователи могут публиковать сообщения как в темах, на которые они подписаны, так и в личных сообщениях для определенных c пользователей. Я использую протокол Stomp. Выбор пользователя, которому вы хотите отправить сообщение, зависит от выбора имени и отправки этого имени в теле сообщения. Метод do аннотирует @MessageMapping
. Метод Given затем вызывает rabbitTemplate.convertAndSend
с ключом маршрутизации параметров в качестве имени пользователя с обменом по умолчанию. согласно документации:
Для фреймов SEND общая очередь создается при первой SEND на это место назначения в этом сеансе, но не впоследствии. Сообщение отправляется на обмен по умолчанию с ключом маршрутизации.
stompClient.subscribe('/queue/'+ author, function (greeting) {
var divId = "#privateinfo";
console.log("SENDING TO TOPIC/GREETING")
showGreeting(divId, JSON.parse(greeting.body).person,
JSON.parse(greeting.body).message);
}, {id: author});
function sendPrivate(receiver) {
//console.log("This is thread from private: " + receiver);
stompClient.send("/app/private", {}, JSON.stringify({
'person': author,
'to': receiver,
'message': $("#message").val() }));
}
Где «автор» - это имя пользователя, с которым я соединяюсь в чате, и «получатель» - человек, выбранный кнопкой. Я отправляю сообщения следующим образом:
@MessageMapping("/private")
public MessageTemplate send2(MessageTemplate messageTemp) throws Exception {
MessageTemplate privateMessage = new MessageTemplate(messageTemp.getPerson(),
messageTemp.getMessage(),
messageTemp.getTo());
rabbitTemplate.convertAndSend("",
messageTemp.getTo() , privateMessage);
rabbitTemplate.convertAndSend("",
messageTemp.getPerson() , privateMessage);
return privateMessage;
}
public class MessageTemplate {
private String person;
private String message;
private String to;
public String getPerson() {
return person;
}
public String getMessage() {
return message;
}
public String getTo() {
return to;
}
public MessageTemplate(@JsonProperty("person") String person,
@JsonProperty("message") String message,
@JsonProperty("to") String to) {
this.person = person;
this.message = message;
this.to = to;
}
}
Чего я хотел бы добиться, так это отправить личное сообщение в новом окне и получить то же самое сообщение для двунаправленного разговора в окне. К настоящему времени я могу сделать это только дважды, вызывая метод convertAndSend
, просто меняя ключ маршрутизации. Есть ли более удобный способ для достижения этой цели?