すべてのHTTPリクエストに応じてクライアントにストンプメッセージを送信

アリーナJ:

私は春のブートサーバーとSTOMPを使ってWebSocketを介して接続されたクライアントを持っています。

私のユースケースは、私は、クライアント、特定のエンドポイントにHTTPリクエストが行われるたびにデータを送信することです。私が見つけたすべてのチュートリアルでは、唯一のクライアントは「トピック/挨拶」にデータを送信することにより、「/ハロー」にいくつかのデータを送信し、サーバーが反応することを、ケースを示しています。

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

私は必要なのメッセージマッピングを必要とせずにデータを送信し、コントローラのメソッドです。それはちょうどエンドポイントへのget要求クライアントに毎回誰かが実行するデータを送信する必要があります。私は次のことを試してみましたが、それはうまくいきませんでした。

@Autowired
private SimpMessagingTemplate msgTemplate;

@SendTo("topic/data-received")
@RequestMapping(value = "/send-data", method = RequestMethod.POST)
public String sendData(@RequestHeader(value = "id") String id,
                               @RequestHeader(value = "data") String data) {

    User user = new User();
    user.id = UUID.fromString(id);
    user.stringData = data;
    database.saveStringData(user);
    msgTemplate.convertAndSend("topic/data-received", "data sent!!");
    return "successful";
}

ここに私のクライアントコードは次のとおりです。

function connect() {
var socket = new SockJS('/clipboard-websocket');
var stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
    console.log('Connected: ' + frame);
    stompClient.subscribe('topic/data-received/', function (message) {
        alert("Data received!!");
    });
}

そして、それは私のWebSocketの設定です。

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

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/clipboard-websocket").withSockJS();
}
Barath:

末尾のスラッシュは、先にありません

msgTemplate.convertAndSend("/topic/data-received", "data sent!!");

ここでは、画像の説明を入力します。

GitHubのレポ発行-54498776

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=215876&siteId=1