无法通过其余控制器方法通过Spring套接字发送消息

时间:2018-12-28 11:33:42

标签: spring rest spring-boot spring-websocket uploading

在有关Websocket的Spring boot官方文档中,他们告诉您可以使用套接字从任何组件发送消息。所以我想我可以保留(不通过套接字上传文件)我的其余控制器处理我的文件上传,并使用套接字从该控制器发送进度消息。

我验证了配置和客户端(使用SockJS),一切正常,因为例如我可以从控制器发送计划的消息,但我不希望出现这种情况。我想租用每当我要发送消息时都要呼叫的服务。 我还检查了许多与无法发送此类消息有关的问题,但是它们的所有解决方案都与客户端或配置类的配置不正确有关,但是正如我所说,我可以发送预定消息而没有任何问题,所以我认为我的问题可能是与控制器本身有关。

控制器

 @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();
            });

我要上传文件并能够查看其进度信息。该文件已上传并已处理,但未获取任何信息(我的消息不是通过套接字发送的。)

0 个答案:

没有答案