1

我有一個應用程序從RabbitMQ接收一些數據。一切工作正常,我的意思是在課堂上我有註解@EnableScheduling。Spring SimpMessagingTemplate

@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隊列偵聽器接收的消息(這工作太),並通過使用SimpMessagingTemplate它們傳遞到特定的上下文踐踏的WebSocket我不能這樣做。 SimpMessagingTemplate在dispatcher-servlet.xml中定義,但與RabbitMQ相關的配置位於根上下文中。我試圖將所有內容都移到一個上下文中,但它不起作用。任何人都有類似的情況下,我有?

+0

「它不起作用」根本沒有任何幫助;你需要描述症狀。您應該能夠簡單地將'SimpMessagingTemplate'移動到根上下文。 –

+0

是的,你是對的;)我的意思是我無法將從RabbitMQ收到的消息傳遞給Stomp端點之一,以便從前端看到該消息。 WebSocket配置將位於DispatcherServlet上下文中,並且不可能將SimpMessagingTemplate注入根上下文中的bean。 –

+0

我必須補充一點,我將一些bean從disaptcher-servlet.xml移到了根上下文,這個流程終於起作用了。我的意思是Queue Listener接收來自RabbitMQ的消息,然後將其發送到註釋了SimpMessagingTemplate的類。消息已發送,...在前端沒有發生.... –

回答

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存儲在您定義此類的相同上下文中。

相關問題