Очереди для методов веб-API - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть один метод веб-API: -

[POST]
public void SaveData()
{
}

Я хочу реализовать таким образом, чтобы, если код внутри метода SaveData () уже выполнялся, метод SaveData не будет принимать никаких других вызовов.

т.е. Я хочу сохранить вызовы метода сохраненных данных в очереди. Когда один вызов закончится, другой вызов произойдет.

Примечание: - вызов метода SaveData () не входит в мои задачи. Я не могу решить вызывать этот метод API синхронно или асинхронно.

Единственное, что входит в мои возможности, это написание кода для метода SaveData. Это будет называться тщательной внешней системой.

1 Ответ

0 голосов
/ 28 июля 2019

Я настоятельно рекомендую вам использовать систему очередей сообщений в вашем приложении. mjwills предоставили два замечательных программных решения для брокера сообщений в разделе комментариев:

  • RabbitMQ : это легкий с открытым исходным кодом и простой в развертывании в помещениях и в облаке
  • Amazon Simple Queue Service (SQS) : полностью управляемое облачное решение, предоставляемое AWS

Необходимо выполнить интеграцию, прежде чем вы сможете использовать любое из этих решений в своем приложении, но впоследствии это будет так просто, как:

[POST]
public void SaveData()
{
    var msg = new SaveDataMessage();
    /* populate msg object... */

    this.queueClient.Publish(msg);
}

Этот псевдокод публикует сообщение в очереди. На другом конце абонент очереди будет получать и обрабатывать эти сообщения последовательно, например:

public void OnMessage(SaveDataMessage msg)
{
    /* process message... */
}

Дополнительные преимущества: i) подписчик может работать в независимом процессе, что означает, что ваш запрос API может быть немедленно возвращен, а фоновый работник позаботится об обработке сообщений ii) эта архитектура будет совместима с API-интерфейсами со сбалансированной нагрузкой, поскольку ваше приложение расширяется.

Определенно стоит приложить усилия, чтобы встроить эту структуру на ранних этапах в ваше приложение. Это даст вам больше гибкости и производительности в долгосрочной перспективе.

Я написал статью на эту тему, которая содержит более подробную дополнительную информацию к этому ответу: Использование очередей для разгрузки Web API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...