我尝试实现这个示例https://spring.io/guides/gs/messaging-stomp-websocket/,一切正常。所以我向前迈进,试图让它与独立的HornetQ一起工作。 所以,我在HornetQ config中定义了一个主题 - / topic / requests
以下是我所做的更改
在index.html中我摆脱了sockJS
function connect() {
var ws = 'ws://127.0.0.1:61613/stomp';
stompClient = Stomp.client(ws);
stompClient.connect("guest", "guest", function(frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('jms.topic.requests', function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});
});
}
从浏览器发送消息
function sendName() {
var name = document.getElementById('name').value;
stompClient.send("jms.topic.requests", {}, JSON.stringify({ 'name': name }));
}
ShowGreeting
function showGreeting(message) {
var response = document.getElementById('response');
console.log('response: ' + response);
var p = document.createElement('p');
p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(message));
response.appendChild(p);
}
将Spring配置为与独立代理一起使用
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/stomp");
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableStompBrokerRelay("/topic", "/queue");
//registry.setApplicationDestinationPrefixes("/jms");
}
控制器
@MessageMapping("/stomp")
@SendTo("/topic/requests")
public Greeting greeting(HelloMessage message) throws Exception {
System.out.println("Controller called!");
Thread.sleep(3000); // simulated delay
return new Greeting("Hello, " + message.getName() + "!");
}
因此,它可以连接到hornetQ的运行实例并将消息发送到主题。但是,不是打印指定的字符串,而是打印“undefined”。我知道该消息正在到达队列,因为我有另一个基于浏览器的订阅者。
控制器中的println永远不会被调用,所以我怀疑我没能正确配置它,但我不知道它会是什么。
问候语
public class Greeting {
private String content;
public Greeting(String content) {
this.content = content;
}
public String getContent() {
return content;
}
}