我想知道如何定义订阅者路径。
例如,订阅路径的声明
stompClient.subscribe("/topic/simplemessagesresponse", function(servermessage) {
为什么有"主题"one_answers"简单消息响应"两部分。。他们引用了什么。有多少这样的领域部分可以存在,为什么?我的问题不仅针对客户端,也针对服务器端。SimpMessagingTemplate.convertAndSend("/topic/simplemessagesresponse", "Message to client");
有一些教程显示了websocket服务器和客户端示例。但是没有足够的规则细节来声明订阅者路径以及如何找到订阅者路径。
在服务器端和客户端声明路径时,更改路径的依赖项是什么。我认为另一个类似的问题是因为编写websocket客户端的页面的位置发生了变化。
引用STOMP规范文档:
请注意,STOMP将此目的地视为不透明字符串传递语义由目的地的名称假定。你应查阅STOMP服务器的文档,了解如何构造一个目的地名称,为您提供传递语义您的应用程序需要的。
这意味着目的地语义是特定于代理的:
- 对于RabbitMQ:查看STOMP下的目的地部分插件文档-http://www.rabbitmq.com/stomp.html对于
- 对于ActiveMQ:查看使用Stomp处理目的地-https://activemq.apache.org/stomp.html
我已经通过关注这个博客实现了websocket stomp。我用SimpMessagingTemplate替换了@SendTo。
这是我的示例ChatController
@Autowired
private SimpMessagingTemplate simpMessagingTemplate;
@MessageMapping("/dualchart")
@ResponseBody
public void dualchat(MessageDTO message) {
// forward message to destination
String destination = "/topic/dualchat/" + message.getToUser();
simpMessagingTemplate.convertAndSend(destination, message);
}
消息DTO
@JsonIgnoreProperties
public class MessageDTO extends BaseModel {
private String fromUser;
private String toUser;
private String message;
public String getFromUser() {
return fromUser;
}
public void setFromUser(String fromUser) {
this.fromUser = fromUser;
}
public String getToUser() {
return toUser;
}
public void setToUser(String toUser) {
this.toUser = toUser;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
Web套接字配置
<websocket:message-broker application-destination-prefix="/app">
<websocket:stomp-endpoint path="/dualchat">
<websocket:sockjs />
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic" />
</websocket:message-broker>
Javascript
var socket = new SockJS("/starter.web.admin/dualchat");
var stompClient = Stomp.over(page.socket);
stompClient.connect({}, socketJsConnectedCallback, socketJsErrorCallback);
function socketJsConnectedCallback() {
var myId = "111"; // replace this Id
stompClient.subscribe('/topic/dualchat/' + myId, function(message) {
console.log("you reveived a message::::::::::" + JSON.stringify(message));
// you have message, and you can do anything with it
});
}
function socketJsErrorCallback(error){console.log(error);}
function sendMessage(message) {
var data = {
toUser : "1",
message : message
}
stompClient.send("/app/dualchat", {}, JSON.stringify(data );
}
希望这将有助于下一次搜索。。。