簡體   English   中英

如何訂閱內部Spring Boot / Simple Broker主題隊列?

[英]How to subscribe an internal Spring Boot/Simple Broker topic queue?

我需要訂閱內部spring引導主題/user/exchange/amq.direct/chat.message來創建一個機器人,它將訂閱一個主題隊列並回復消息。

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {

    registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();

}

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    // use the /topic prefix for outgoing WebSocket communication
    config.enableSimpleBroker("/queue/", "/topic/", "/exchange/");

    // use the /app prefix for others
    config.setApplicationDestinationPrefixes("/app");
}

}

我的控制器:

    @MessageMapping("/chat.message")
public ChatMessage filterMessage(@Payload ChatMessage message, Principal principal) {

    message.setUsername(principal.getName());

    return message;
}

@MessageMapping("/chat.private.{username}")
public void filterPrivateMessage(@Payload ChatMessage message, @DestinationVariable("username") String username, Principal principal) {

    message.setUsername(principal.getName());

    simpMessagingTemplate.convertAndSend("/user/" + username + "/exchange/amq.direct/chat.message", message);

}

如何訂閱我通過SimpMessagingTemplate放置消息的內部隊列/主題?

您可以使用@sendTo批注和@DestinationVariable來區分您要訂閱的用戶。 我使用此方法來共享我當前的訂閱點。 我會給你一個設置代碼和一個簡單的例子。

它繼承自AbstractWebSocketMessageBrokerConfigurer,其配置是最終的。

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/webSocket").setAllowedOrigins("*").withSockJS();
}

此代碼只能向訂閱特定路徑的用戶以及客戶端將消息發送到的路徑發送消息。

@MessageMapping(value = "/question/detail/{questionId}/message")
@SendTo("/question/detail/{questionId}")
public MessageDto message(@DestinationVariable Long questionId, MessageDto messageDto) {
    return messageDto;
}

你想要的答案是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM