2014-10-20 16 views
6

Tôi đang cố gắng sử dụng các ổ cắm web trong ứng dụng của mình. Tôi đã làm theo hướng dẫn này: http://spring.io/guides/gs/messaging-stomp-websocket/Mùa xuân, cách phát tin nhắn tới khách hàng được kết nối bằng cách sử dụng ổ cắm web?

Nó hoạt động hoàn hảo.

Khi một trong các khách hàng kết nối nút nhấn, phương pháp này được gọi là:

@MessageMapping("/hello") 
@SendTo("/topic/greetings") 
public Greeting greeting() throws Exception { 
    System.out.println("Sending message..."); 
    Thread.sleep(1000); // simulated delay 
    return new Greeting("hello!");   
} 

và thông điệp được phát sóng đến tất cả các khách hàng được kết nối.

Bây giờ tôi muốn sửa đổi ứng dụng máy chủ của mình, nó sẽ phát thông báo định kỳ (mỗi giờ) cho tất cả khách hàng được kết nối của tôi mà không có sự tương tác của khách hàng.

Something như thế này (nhưng điều này không làm việc rõ ràng):

@Scheduled(fixedRate = 3600000) 
public void sendMessage(){ 
    try { 
    @SendTo("/topic/greetings")  
    greeting(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Thx cho lời khuyên.

Trả lời

9

@SendTo chỉ hoạt động trong SimpAnnotationMethodMessageHandler, được khởi xướng chỉ thông qua các SubProtocolWebSocketHandler, Hance khi WebSocketMessage nhận được từ khách hàng.

Để đạt được yêu cầu của bạn, bạn nên tiêm cho @Scheduled bạn dịch vụ SimpMessagingTemplate brokerMessagingTemplate và sử dụng nó trực tiếp:

@Autowired 
private SimpMessagingTemplate brokerMessagingTemplate; 
....... 
this.brokerMessagingTemplate.convertAndSend("/topic/greetings", "foo"); 
+0

Bạn có thể xin hãy giải thích về điều đó? làm thế nào để tiêm nó? –

+0

Vui lòng xem chỉnh sửa trong câu trả lời của tôi xung quanh '@ Autowired'. –

Các vấn đề liên quan