Почему использование AMQP/ZeroMQ/RabbitMQ

Второй не будет работать, потому что, когда Вы звоните, он как этот Python внутренне пытается назвать его с a_test экземпляром как первый аргумент, но Ваш method_two не принимает аргументов, таким образом, он работа привычки, Вы получите ошибку периода выполнения. Если Вы хотите эквивалент статического метода, можно использовать метод класса. Существует намного меньше потребности в методах класса в Python, чем статические методы на языках как Java или C#. Чаще всего лучшее решение состоит в том, чтобы использовать метод в модуле вне определения класса, те работают более эффективно, чем методы класса.

73
задан Community 17 February 2014 в 11:23
поделиться

5 ответов

что делает их лучше, чем написание собственной библиотеки?

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

Эти инструменты очень полезны после первого release, когда вам действительно нужно расширить свое приложение и добавить в него больше функций. Позвольте мне привести несколько вариантов использования:

  • вашему приложению придется взаимодействовать с машиной с прямым порядком байтов (sparc / powerpc) с машины с прямым порядком байтов (x86, Intel / amd). В вашей системе обмена сообщениями использовалось некоторое допущение относительно порядка следования байтов: пойдите и исправьте
  • вы разработали свое приложение так, чтобы оно не было двоичным протоколом / системой обмена сообщениями, и теперь оно работает очень медленно, потому что вы тратите большую часть своего времени на его анализ (количество сообщений увеличился, и синтаксический анализ стал узким местом): адаптируйте его так, чтобы он мог передавать двоичную / фиксированную кодировку
  • вначале у вас было 3 машины внутри локальной сети, без заметных задержек, все попадает на каждую машину. появляется ваш клиент / босс / заостренный-дьявол-босс и сообщает вам, что вы установите приложение в WAN, которым вы не управляете, - а затем у вас начнутся сбои соединения, плохая задержка и т. д. вам нужно сохранить сообщение и повторить попытку отправки их позже: вернитесь к коду и вставьте это в (и наслаждайтесь) отправленные сообщения

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

  • некоторые сообщения являются критическими, и их прием / отправка требует надлежащего резервного копирования / сохранения /. Почему ты спрашиваешь ? для целей аудита

И многие другие варианты использования, которые я забыл ...

Вы можете реализовать это самостоятельно, но не тратьте на это много времени: вы, вероятно, все равно замените его позже.

)

  • некоторые сообщения являются критическими, и их прием / отправка требует надлежащего резервного копирования / сохранения /. Почему ты спрашиваешь ? для целей аудита
  • И многие другие варианты использования, которые я забыл ...

    Вы можете реализовать это самостоятельно, но не тратьте на это много времени: вы, вероятно, все равно замените его позже.

    )

  • некоторые сообщения являются критическими, и их прием / отправка требует надлежащего резервного копирования / сохранения /. Почему ты спрашиваешь ? для целей аудита
  • И многие другие варианты использования, которые я забыл ...

    Вы можете реализовать это самостоятельно, но не тратьте на это много времени: вы, вероятно, все равно замените его позже.

    77
    ответ дан 24 November 2019 в 12:17
    поделиться

    что делает их лучше, чем написание вашей собственной библиотеки?

    Системы очередей сообщений являются транзакционными, которые концептуально просты в использовании в качестве клиента, но их сложно реализовать в качестве разработчика, особенно учитывая постоянные очереди. Вы можете подумать, что можете обойтись без написания библиотеки для быстрого обмена сообщениями, но без транзакций и постоянства у вас не будет всех преимуществ системы обмена сообщениями.

    Постоянство в этом контексте означает, что промежуточное ПО для обмена сообщениями постоянно сохраняет необработанные сообщения хранилище (на диске) на случай выхода сервера из строя; после перезапуска сообщения можно обрабатывать, и повторная передача не требуется (отправитель даже не знает, что возникла проблема). Транзакционный означает, что вы можете читать сообщения из разных очередей и записывать сообщения в разные очереди транзакционным способом, Это означает, что либо все операции чтения и записи завершились успешно, либо (если один или несколько завершились ошибкой) ни одна из них не завершилась успешно. На самом деле это не сильно отличается от транзакционности, известной при взаимодействии с базами данных, и имеет те же преимущества (упрощает обработку ошибок; без транзакций вам нужно будет гарантировать, что каждое отдельное чтение / запись будет успешным, и если один или несколько из них выйдут из строя, у вас есть для отката тех изменений, которые действительно были успешными).

    6
    ответ дан 24 November 2019 в 12:17
    поделиться

    Это очень похоже на вопрос: зачем использовать базу данных, если вы можете написать свою собственную?

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

    Показательный пример: настойчивость. Написать инструмент для хранения одного сообщения на диске очень просто. Трудно написать персистор, который хорошо масштабируется и стабильно работает и во многих различных сценариях использования, является управляемым и дешевым в обслуживании. Если вы хотите увидеть, как кто-то жалуется на то, насколько это тяжело, взгляните на это: http://www.lshift.net/blog/2009/12/07/rabbitmq-at-the-skills-matter-functional- программирование-обмен

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

    40
    ответ дан 24 November 2019 в 12:17
    поделиться

    Я сам рассматриваю возможность использования ZeroMQ - поэтому я наткнулся на этот вопрос.

    Давайте предположим на данный момент, что у вас есть возможность реализовать систему очередей сообщений, которая отвечает всем вашим требованиям. Почему вы должны использовать ZeroMQ (или другую библиотеку стороннего производителя), а не "рулонный" подход? Все просто - стоимость.

    Предположим на минуту, что ZeroMQ уже отвечает всем вашим требованиям. Все, что нужно сделать, это интегрировать его в вашу сборку, прочитать немного документации и затем начать его использовать. Это гораздо меньше усилий, чем создание собственной разработки. Кроме того, бремя обслуживания перекладывается на другую компанию. Поскольку ZeroMQ бесплатен, вы как будто только что увеличили свою команду разработчиков, включив в нее (часть) команды ZeroMQ.

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

    Возможно, вы (или, скорее, ваш партнер) страдаете, как и многие разработчики, от синдрома "Not Invented Here"? Если это так, измените свое отношение и пересмотрите использование ZeroMQ. Лично я предпочитаю преимущества отношения Proudly Found Elsewhere. Я надеюсь, что смогу гордиться тем, что нашел ZeroMQ... время покажет.

    EDIT: Я наткнулся на это видео от разработчиков ZeroMQ, в котором говорится о том, почему вы должны использовать ZeroMQ.

    18
    ответ дан 24 November 2019 в 12:17
    поделиться

    Если у вас есть немного времени, попробуйте и выкатите свою собственную реализацию! Результаты этого упражнения убедят вас в целесообразности использования уже проверенной библиотеки.

    2
    ответ дан 24 November 2019 в 12:17
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: