我有一个从RabbitMQ接收一些数据的应用程序。一切正常,我的意思是在课堂上我有注释@EnableScheduling。
@Scheduled(fixedDelay = 5000)
public void volumeGraphData() {
Random r = new Random();
Graph graph = new Graph();
graph.setVolume(r.nextInt(500));
String json = gson.toJson(graph);
MessageBuilder<byte[]> messageBuilder = MessageBuilder.withPayload(json.getBytes());
simpMessagingTemplate.send("/" + volumeGraph, messageBuilder.build());
}
但是当我想处理来自RabbitMQ的Queue Listener收到的消息(这也有效)并使用SimpMessagingTemplate将它们传递给Stomp WebSocket的特定上下文时我不能这样做。 SimpMessagingTemplate在dispatcher-servlet.xml中定义,但与RabbitMQ相关的配置在根上下文中。我试图将所有内容移动到一个上下文,但它不起作用。任何人都有类似的情况,我有一个?
答案 0 :(得分:1)
我终于设法解决了这个问题。所以,基本上你需要将与Spring Messaging / WebSocket相关的bean移动到一个公共bean。
这就是为什么在我的根上下文中我有这样的界限:
<!-- Fix for IntelliJ 13.1 https://youtrack.jetbrains.com/issue/IDEA-123964 -->
<context:component-scan base-package="org.springframework.web.socket.config"/>
包pl.garciapl.program.service.config位于负责配置WebSockets的类中:
@Configuration
@EnableWebSocketMessageBroker
@Component("messageBroker")
public class MessageBrokerConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
stompEndpointRegistry.addEndpoint("/test").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry messageBrokerRegistry) {
}
@Override
public void configureClientInboundChannel(ChannelRegistration channelRegistration) {
}
@Override
public void configureClientOutboundChannel(ChannelRegistration channelRegistration) {
}
@Override
public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
messageConverters.add(new MappingJackson2MessageConverter());
return false;
}
}
请记住在您定义上述类的相同上下文中存储使用SimpMessagingTemplate的bean。