簡體   English   中英

使用Spring websockets定制Stomp Headers

[英]Custom Stomp Headers using Spring websockets

我有一個基本的spring websocket應用程序,它目前向訂閱者發送基本數據。 目前,系統使用SimpMessageSendingOperations類作為消息處理程序。 如果我調用SimpMessageSendingOperations.convertAndSend(destination, object)則訂閱的客戶端將轉換和接收該對象。

我希望能夠向客戶端發送自定義標頭。 我嘗試使用SimpMessageSendingOperations.convertAndSend(destination, object, headers)方法來執行此操作。 但是,自定義標頭不包含在stomp消息中。

通過代碼調試它看起來像StompHeaderAccessor.toStompHeaderMap()方法調用toNativeHeaderMap() ,它使用本toNativeHeaderMap()和原始本toNativeHeaderMap()映射來構建stomp頭。

有沒有辦法將自定義標頭添加到stomp消息?

StompHeaderAccessor擴展了NativeMessageHeaderAccessor,它似乎是非stomp標頭所在的位置,除了它們都存儲在名為nativeHeaders的單個標頭中 - 它本身就是一個映射。

@MessageMapping("/hello")
@SendTo("/topic/greetings")
public  GenericMessage<Greeting> greeting(HelloMessage message) throws Exception {      
    Map<String, List<String>> nativeHeaders = new HashMap<>();
    nativeHeaders.put("hello", Collections.singletonList("world"));

    Map<String,Object> headers = new HashMap<>();
    headers.put(NativeMessageHeaderAccessor.NATIVE_HEADERS, nativeHeaders);

    return new GenericMessage<Greeting>(new Greeting("Hello, " + message.getName() + "!"), headers);
}

用於將自定義標頭包裝到nativeHeaders標頭的簡單攔截器服務器端應足以在客戶端公開它們作為映射message.headers.nativeHeaders的位置。 同樣地,您可以編寫一個客戶端攔截器來將nativeHeaders移動到常規頭中 - 因此在您的客戶端知道該消息之前,所有預期的頭文件都只是在message.headers中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM