2016-04-06 322 views
4

大家好,我試圖將消息發送到端點踩不發送消息,但any.I現在用彈簧啓動與STOMP以下我沒有得到是我班SimpMessagingTemplate春季啓動

@Controller 
public class GreetingController { 

    @MessageMapping("/hello") 
    @SendTo("/topic/greetings") 
    public Greeting greeting(HelloMessage message) throws Exception { 
    System.out.println(message.getName()); 
    Thread.sleep(13000); // simulated delay 
    return new Greeting("Hello, " + message.getName() + "!"); 
    } 

} 

@Controller             
public class Testcont { 

    @Autowired 
    private SimpMessagingTemplate messageSender; 

    @RequestMapping(value="/Users/get",method=RequestMethod.POST) 
    @ResponseBody 
    public String getUser(@RequestParam(value = "userId") String userId, @RequestParam(value = "password") String password, @RequestParam(value="port") String port, HttpServletRequest request) { 
    HelloMessage mess=new HelloMessage(); 
    mess.setName(userId); 
    messageSender.convertAndSend("/app/hello",mess); 
    return "Success"; 

} 

和我的WebSocket的配置

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/topic"); 
     config.setApplicationDestinationPrefixes("/app"); 
    } 

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

} 

我沒有在控制檯中發現任何錯誤。上面的代碼在Web瀏覽器中運行良好。

+0

你是怎麼實現這個扎希德的?米卡住在同一問題上,我不明白答案 –

回答

4

SimpMessagingTemplate豆正是對於券商的部分(AbstractMessageBrokerConfiguration):

@Bean 
public SimpMessagingTemplate brokerMessagingTemplate() { 
    SimpMessagingTemplate template = new SimpMessagingTemplate(brokerChannel()); 
    String prefix = getBrokerRegistry().getUserDestinationPrefix(); 
    if (prefix != null) { 
     template.setUserDestinationPrefix(prefix); 
    } 

既然你發短信不給經紀人目的地(/app/你的情況),這樣的消息僅僅是由AbstractBrokerMessageHandler.checkDestinationPrefix(destination)忽略。

如果你想用同一@MessageMapping來處理內部郵件,你應該使用clientInboundChannel直接,這是由SimpAnnotationMethodMessageHandler提供:

@Bean 
public SimpAnnotationMethodMessageHandler simpAnnotationMethodMessageHandler() { 
    SimpAnnotationMethodMessageHandler handler = createAnnotationMethodMessageHandler(); 
    handler.setDestinationPrefixes(getBrokerRegistry().getApplicationDestinationPrefixes()); 

我想你可以創建自己的SimpMessagingTemplate實例clientInboundChannel,類似於brokerMessagingTemplate bean。你會沒事的。

+0

謝謝,我想我現在知道我在哪裏犯錯。 –

+0

阿爾喬姆我沒明白你的答案,你能指導我嗎? –

+0

從您指導的位置不確定,但我認爲從參考手冊開始確實會更好:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html 。一切休息都應該在單獨的SO線程中解決。 –