【问题标题】:spring stomp websocket + ActiveMQ [duplicate]spring stomp websocket + ActiveMQ [重复]
【发布时间】: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


    【解决方案1】:

    我刚刚发现,如果我应用来自here 的更改,它就会执行此操作。

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 2015-04-06
      • 2016-11-09
      • 2016-07-04
      • 2018-10-31
      • 2016-05-06
      • 2020-06-17
      • 2016-06-28
      • 1970-01-01
      相关资源
      最近更新 更多