Если вы хотите, чтобы SEDA отправляла сообщения от этапа к этапу, то реализации JMS обычно намного быстрее и более масштабируемы, поскольку MOM разработаны так, что не требуют блокировок, поэтому они могут быть в высокой степени асинхронными и параллельными. С помощью JMS вы можете настроить потребителя при запуске, и брокер сообщений, как правило, будет отправлять сообщения в ваше приложение как можно скорее, чтобы в любое время было доступно много объектов в памяти для обработки, как только ваше приложение сможет их обработать - избегая любых сетевых обходов. отключения или блокировки и т. д. См., например, , как предварительная выборка работает с ActiveMQ
Использование JavaSpaces для обмена сообщениями имеет тенденцию быть менее эффективным, поскольку они обычно реализуются с использованием более ориентированного на базу данных подхода использования блокировок с чтением / записью в записи и т. Д. Таким образом, вы склонны запрашивать объекты, а затем обрабатывать их с помощью JavaSpaces, что имеет тенденцию будь более болтливым и менее эффективным для обмена сообщениями.
Большая победа подхода JavaSpaces - если вы хотите использовать совместно используемое состояние; Вы можете использовать JavaSpace как своего рода базу данных. Хотя, возможно, если вам действительно нужна база данных, вы можете использовать реляционную базу данных с JMS; но JavaSpace люди любят использовать единую систему для общего состояния и обмена сообщениями.
FWIW часто нет серебряного булла с промежуточным программным обеспечением; иногда в памяти SEDA - это все, что вам нужно, иногда JMS, иногда реляционная база данных, иногда файлы в каталоге. Это полностью зависит от ваших требований, масштабируемости, пропускной способности, надежности и так далее. Я склонен рекомендовать людям скрывать API промежуточного программного обеспечения от своего кода, чтобы они могли легко переключаться на любое промежуточное программное обеспечение с помощью простого однострочного изменения конфигурации, такого как использование Apache Camel