java - 如何订阅内部 Spring Boot/Simple Broker 主题队列?

标签 java spring spring-boot spring-websocket spring-messaging

我需要订阅内部 spring boot 主题 /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");
}

我的 Controller :

    @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;
}

是你想要的答案吗?

关于java - 如何订阅内部 Spring Boot/Simple Broker 主题队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38568894/

相关文章:

java - AspectJ + @Configurable

java - 如何使用 Spring Boot 查询和检索约 100 个客户数据库的结果?

java - 根据 JSON 请求正文中的另一个属性反序列化抽象属性

java - 使用 GenerationType.AUTO 未找到用于 h2 测试的序列 "HIBERNATE_SEQUENCE"

java - `this` 是 Java 中的指针吗?

java - JSON 字符串到 Java 字符串

spring 依赖管理 gradle 插件不下载依赖

Java AWT 重量级 Canvas

java - 如何在我的 Eclipse 中使用逆向工程

java - 使用 java config 配置的自定义 spring 数据 (mongo) 存储库的 Autowiring 如何工作?