Есть ли какая-нибудь библиотека или решение для весеннего отклика с долгой работой? - PullRequest
0 голосов
/ 07 октября 2018

Некоторому процессу в моем проекте потребовалось несколько минут (1 ~ 10 минут).и я предоставляю результат этого процесса, используя пружинную загрузочную паутину.поэтому мой API должен возвращать ответ со статусом (в очереди / работает / закончен / не удалось).поэтому я сделал вид этих атрибутов реализованным в классе ResponseEntity.

Мой поток запросов

  1. Пользовательский запрос
  2. JavaScript вызывает API с параметром
  3. сервер выполняет задание, используя атрибут запроса (параметр, информация о пользователе)
  4. проверяет, что задание уже существует.если нет, поставьте задание в очередь.если существует, вернуть статус текущего задания (завершенное задание имеет результат процесса).

QueueExecutor запускает новое задание для обрабатывающего компонента, а затем создает поток для периодической проверки.

клиентский запрос пользователя периодически.и получить задание ставится в очередь / выполняется / завершается с помощью setInterval () .если не закончено, пройдите.иначе запустите процесс пользовательского интерфейса.

В моем потоке много маленьких проблем, поэтому я хочу знать, есть ли какая-либо общая или полезная библиотека или решения.пожалуйста совет мне.спасибо.

1 Ответ

0 голосов
/ 07 октября 2018

Я предлагаю использовать технологию Push лучше, чем традиционный метод опроса, больше информации .

Прежде всего вам необходимо создать контроллер обработки сообщений в Spring:

@Controller
public class GreetingController {
    @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()) + "!");
    }
}

Затем настроить Spring для обмена сообщениями STOMP:

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

На основе клиентав какой JS-библиотеке вы должны зарегистрироваться / подписаться на сообщение.

Посмотрите на этот пример, в котором используется пружина для push:

...