Не удается отправить сообщение через пружинный сокет из метода покоя контроллера - PullRequest
0 голосов
/ 28 декабря 2018

В Spring загружаются официальные документы о веб-сокетах, которые сообщают, что сообщения можно отправлять с помощью сокетов из любого компонента.Поэтому я подумал, что могу сохранить (не загружая файлы через сокет) мой контроллер остатка, обрабатывая загрузку моего файла, и отправлять сообщения о ходе выполнения с этого контроллера через сокет.

Я проверил конфигурацию и клиентскую часть (с SockJS), и все выглядит хорошо, потому что, например, gi может отправлять запланированные сообщения с контроллера, но я не хочу этого сценария.Я предпочитаю нанимать службу, которая будет вызываться всякий раз, когда я хочу отправлять сообщения.Я также проверил множество проблем, связанных с невозможностью отправки таких сообщений, но все их решения были связаны с тем, что клиент или класс конфигурации плохо настроены, но, как я уже сказал, я могу отправлять запланированные сообщения без проблем, поэтому я подумал, что моя проблема можетбыть связанным с самим контроллером.

Контроллер

 @Autowired
private SimpMessagingTemplate template; 

   @PostMapping("/")
public String handleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {

    File uploadedFile = storageService.store(file);
    redirectAttributes.addFlashAttribute("message",
            "You successfully uploaded " + file.getOriginalFilename() + "!");


    template.convertAndSend("/topic/greetings", "test message");

    myService.uploadFile(uploadedFile);

    return "redirect:/";
}

Класс конфигурации

  @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("/gs-guide-websocket").withSockJS();
}

   }

Клиент

            var stompClient = null;

            function setConnected(connected) {
                $("#connect").prop("disabled", connected);
                $("#disconnect").prop("disabled", !connected);
                if (connected) {
                    $("#conversation").show();
                }
                else {
                    $("#conversation").hide();
                }
                $("#greetings").html("");
            }

            function connect() {
                var socket = new SockJS('/gs-guide-websocket');
                stompClient = Stomp.over(socket);
                stompClient.connect({}, function (frame) {
                    setConnected(true);
                    console.log('Connected: ' + frame);
                    stompClient.subscribe('/topic/greetings', function (greeting) { 
                        showGreeting(greeting.body);
                    });
                });
            }

            function disconnect() {
                if (stompClient !== null) {
                    stompClient.disconnect();
                }
                setConnected(false);
                console.log("Disconnected");
            }

            function sendName() {
                stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()}));
            }

            function showGreeting(message) {
                  $("#greetings").append("<tr><td>" + message + "</td></tr>");
            }

            $(function () {
                $(".form-inline").on('submit', function (e) {
                    e.preventDefault();
                });
                $( "#connect" ).click(function() { connect(); });
                $( "#disconnect" ).click(function() { disconnect(); });
                $( "#send" ).click(function() { sendName(); });
            });

            $(document).ready(function() {
                connect();
            });

Я хочу загрузить файл и увидеть его информацию о прогрессе.Файл загружен и обработан, но не получает никакой информации (Мои сообщения не отправляются через сокет).

...