【发布时间】:2022-12-15 02:26:49
【问题描述】:
我正在尝试构建一个 Spring STOMP websocket + ActiveMQ 服务。我已经设置了 websocket 和 ActiveMQ 队列。
ActiveMQ queue 工作得很好,但我无法让我的 websocket 端点向连接到该主题的客户端发送消息。
Websocket 客户端似乎也连接得很好。问题是,当控制器接收到信息时,它不会被客户端捕获。
--WebsocketConfig.java--
@Configuration
@EnableWebSocketMessageBroker
public class WebsocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/websocket").withSockJS();
}
}
--WebsocketController.java--
@Controller
public class WebsocketController {
@Autowired
private ItemService itemService;
@JmsListener(destination = "items-queue")
@MessageMapping("/websocket")
@SendTo("/topic/items")
public String itemsWebsocket(Iterable<Item> items) {
System.out.println("Websocket controller reached");
for (Item item : items) System.out.println(item.getName());
return "hi from websocket";
}
}
--app.js--
let stompClient = null;
function connect() {
let socket = new SockJS('/websocket');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/items', function (items) {
appendItems(items);
});
});
}
function disconnect() {
if (stompClient !== null) {
stompClient.disconnect();
}
console.log("Disconnected");
}
function appendItems(items) {
console.log(items);
const itemListContainer = document.getElementById("item-list");
itemListContainer.innerText = "";
Array.from(items).forEach( item => {
const itemContainer = document.createElement("div");
itemContainer.innerText = item.name;
itemListContainer.append(itemContainer);
});
}
connect();
【问题讨论】:
标签: java spring-boot websocket activemq