Я создал приложение с большой резьбой, которое получает веб-страницы из сети и выполняет глубокую обработку HTML. В основном все мои потоки состоят из множества операций с привязкой к сети и операций с привязкой к ЦП. Я запускаю их в отдельных потоках (так что я добился большей загрузки IO/CPU).jms: queues vs seda: in Apache Camel
Поскольку есть миллионы URL-адресов для обработки, я не могу запускать seda: coz, так как для Camel 2.3 размер по умолчанию неограничен, и через некоторое время у меня закончилась нехватка памяти. Я могу строго ограничить размер очередей seda, но я решил не делать этого, но вместо этого используйте очереди JMS.
На том же числе потоков я вижу разные результаты телеметрии нитей с использованием jprofiler8. Пожалуйста, проверьте разницу:
Может кто-нибудь объяснить мне, почему у меня есть гораздо более эффективное использование IO при использовании Седа: очереди по сравнению с JMS: одни?
Когда я использую компонент camel-jms, мне не нужно указывать реализацию сервера MOM (ActiveMQ, Qpid, любой другой MQ). Он работает из коробки, поэтому я думаю, что он использует некоторую простую внутреннюю реализацию MQ. Мой вопрос заключался в том, что очередь SEDA в режиме «все в памяти» работает намного быстрее/оптимальнее, чем этот простой MQ-модуль, который распространяется вместе с компонентом camel-jms. – Archer
Поверь мне. В camel-jms нет волшебной реализации MQ. Это полностью основано на Spring JMS, которая является клиентской средой для JMS. Вероятно, у вас есть встроенная реализация ActiveMQ под капотом. Все еще то, что я сказал выше, все еще имеет место. Реализации JMS намного сложнее, чем простая очередь. –
Спасибо за ваш ответ. У меня действительно есть ActiveMQ, который я явно не настроил для этих jms. Я попытаюсь исключить его и посмотреть, что произойдет. – Archer