使用Spring Boot排程WebSocket推送的教程和原始碼 - Baeldung
本教程介紹如何使用WebSockets將計劃的訊息從伺服器傳送到瀏覽器。使用Spring的實用程式類SimpMessagingTemplate使通過WebSocket推送伺服器訊息會更容易。
示例的原始碼可 在GitHub上獲得
為了推送訊息,我們使用實用程式類SimpMessagingTemplate。預設情況下,它在Spring Context中以@Bean形式提供。當AbstractMessageBrokerConfiguration 在類路徑中時,可用通過自動配置宣告它。這樣就可以將其注入任何Spring元件中。
假設這個實用類注入了一個名為simpMessagingTemplate的變數中,使用它來將訊息釋出到主題/ topic/pushmessages:
simpMessagingTemplate.convertAndSend("/topic/pushmessages", new OutputMessage("Chuck Norris", faker.chuckNorris().fact(), time)); |
使用SimpMessagingTemplate通過WebSocket傳送OutputMessage 這個POJO訊息, 下面是定義何時傳送訊息,@Scheduled註釋允許的方法重複執行。有了它,我們可以使用基於速率的簡單排程或更復雜的“ cron”表示式。
@Service public class ScheduledPushMessages { @Scheduled(fixedRate = 5000) public void sendMessage(SimpMessagingTemplate simpMessagingTemplate, ChuckNorris chuckNorris) { String time = new SimpleDateFormat("HH:mm").format(new Date()); simpMessagingTemplate.convertAndSend("/topic/pushmessages", new OutputMessage("Chuck Norris (@Scheduled)", chuckNorris().fact(), time)); } } |
我們用@Scheduled(fixedRate = 5000)註釋sendMessage方法。這使sendMessage每五秒鐘執行一次。然後,我們使用simpMessagingTemplate例項將OutputMessage傳送到主題。
simpMessagingTemplate 和chuckNorris例項是從Spring上下文作為方法引數注入。
如果使用WebFlux,則可以使用Flux::interval運算子。
以上是核心部分。
下面是外圍大概程式碼,下面建立一個伺服器端的API端點:
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { // ... registry.addEndpoint("/chatwithbots"); registry.addEndpoint("/chatwithbots").withSockJS(); } } |
客戶端是一個簡單的HTML頁面。它使用SockJS客戶端和STOMP訊息協議。
讓我們看看客戶端如何訂閱主題:
<html> <head> <script src="./js/sockjs-0.3.4.js"></script> <script src="./js/stomp.js"></script> <script type="text/javascript"> // ... stompClient = Stomp.over(socket); stompClient.connect({}, function(frame) { // ... stompClient.subscribe('/topic/pushmessages', function(messageOutput) { showMessageOutput(JSON.parse(messageOutput.body)); }); }); // ... </script> </head> <!-- ... --> </html> |
相關文章
- Spring Boot的Clean架構教程與原始碼 - BaeldungSpring Boot架構原始碼
- 基於Spring Batch的Spring Boot的教程 - BaeldungBATSpring Boot
- Spring Boot 整合單機websocket(附github原始碼)Spring BootWebGithub原始碼
- GraphQL SPQR和Spring Boot入門 | baeldungSpring Boot
- 使用Spring Boot和Elasticsearch教程Spring BootElasticsearch
- Spring Boot中使用gRPC與Protobuf驗證教程原始碼Spring BootRPC原始碼
- Spring Boot原始碼分析-啟動過程Spring Boot原始碼
- Spring Boot WebSocketSpring BootWeb
- Spring Boot Reactor Netty配置 | BaeldungSpring BootReactNetty
- 結合GraalVM與Spring Native的Spring Boot原始碼教程 | foojayLVMSpring Boot原始碼
- Spring Boot支援Java 16和新的Java記錄原始碼教程 | foojaySpring BootJava原始碼
- Spring Boot面試問題| BaeldungSpring Boot面試
- Spring Boot和Netflix DGS的GraphQL原始碼案例Spring Boot原始碼
- 使用Netty實現HTTP2伺服器/客戶端的原始碼和教程 - BaeldungNettyHTTP伺服器客戶端原始碼
- Spring Boot系列(四):Spring Boot原始碼解析Spring Boot原始碼
- 使用Spring Boot和Kafka Streams實現基於SAGA模式的分散式事務原始碼教程 - PiotrSpring BootKafka模式分散式原始碼
- 使用Hazelcast排程Spring tasksASTSpring
- Spring Boot中實現規則引擎原始碼教程Spring Boot原始碼
- 在Spring Boot設定Swagger 2 - BaeldungSpring BootSwagger
- Spring WebFlux 基礎教程:WebSocket 使用SpringWebUX
- Spring Boot的微服務分散聚集模式教程與原始碼 - vinsguruSpring Boot微服務模式原始碼
- 加快Spring Boot啟動的幾種方法 | baeldungSpring Boot
- Spring Boot系列十七 Spring Boot 整合 websocket,使用RabbitMQ做為訊息代理Spring BootWebMQ
- 比特幣原始碼分析:任務排程器的使用比特幣原始碼
- Spring Boot系列22 Spring Websocket實現websocket叢集方案的DemoSpring BootWeb
- Spring Boot系列十六 WebSocket簡介和spring boot整合簡單訊息代理Spring BootWeb
- Spring Boot應用中進行任務排程Spring Boot
- swoole 協程原始碼解讀 (協程的排程)原始碼
- Spring Boot系列(三):Spring Boot整合Mybatis原始碼解析Spring BootMyBatis原始碼
- Spring Boot整合swagger使用教程Spring BootSwagger
- Spring Boot Test 的詳細使用教程Spring Boot
- Spring Boot + JPA DataTable原始碼Spring Boot原始碼
- Spring Boot 整合 WebSocket 實現服務端推送訊息到客戶端Spring BootWeb服務端客戶端
- libgo原始碼分析之多執行緒協程管理和排程Go原始碼執行緒
- spring boot使用@Async非同步註解,原理+原始碼Spring Boot非同步原始碼
- Spring WebFlux安全配置教程和原始碼 - vinsguruSpringWebUX原始碼
- 精盡Spring Boot原始碼分析 - SpringApplication 啟動類的啟動過程Spring Boot原始碼APP
- Spring Boot安全保護使用教程Spring Boot