Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何订阅内部Spring引导/简单代理主题队列?_Java_Spring_Spring Boot_Spring Websocket_Spring Messaging - Fatal编程技术网

Java 如何订阅内部Spring引导/简单代理主题队列?

Java 如何订阅内部Spring引导/简单代理主题队列?,java,spring,spring-boot,spring-websocket,spring-messaging,Java,Spring,Spring Boot,Spring Websocket,Spring Messaging,我需要订阅内部spring引导主题/user/exchange/amq.direct/chat.message,以创建一个bot,该bot将订阅主题队列并回答消息 @Configuration @EnableWebSocketMessageBroker public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer { @Override public void registerStomp

我需要订阅内部spring引导主题
/user/exchange/amq.direct/chat.message
,以创建一个bot,该bot将订阅主题队列并回答消息

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

}

如何订阅SimpMessageTemplate放置消息的内部队列/主题?

您可以使用@sendTo注释和@DestinationVariable来区分要订阅的用户。我使用此方法共享我当前的订阅点。 我会给你一个我的设置代码和一个简单的例子

它继承自AbstractWebSocketMessageBrokerConfigure,其配置为最终配置

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

这是您想要的答案吗?

此时,为了使用这些功能,我稍微改变了策略,我记不太清楚,但您的答案肯定会帮助需要它的人。