У меня есть система, в которой некоторые слабосвязанные компоненты обмениваются сообщениями через JMS. Сейчас я смотрю на новое требование, которое приводит к тому, что некоторому общему ресурсу требуется защита от доступа двух или более компонентов одновременно (более или менее пример проблемы чтения / записи). Я ищу способ координировать доступ к общему ресурсу, не добавляя слишком много дополнительной сложности к системе. (Например, я бы не хотел добавлять выделенный диспетчер распределенных блокировок в микс, если мне не нужно).
У меня в голове есть частичное решение, которое будет использовать инфраструктуру JMS в качестве основы. По сути, отправка сообщений блокировки в очереди. Если в очереди записи есть сообщение, никто не может публиковать в этой очереди, пока компонент, отправивший сообщение, не удалит его снова. Точно так же, когда читатель начинает читать ресурс, он отправляет сообщение в очередь читателей и удаляет его по завершении. Автор не начнет писать, пока не увидит, что очередь читателей и авторов пуста. Читатель не запустится, пока не увидит пустую очередь писателей.
Конечно, мне нужно будет найти способ синхронизировать доступ к обеим очередям, чтобы писатель не отправлял сообщения в очередь писателя, пока читатель отправляет сообщение в очередь читателя, который уже видел пустую очередь писателя ...
Можно ли с этим справиться с разумным количеством работы? Возможно, существуют существующие реализации менеджера блокировок поверх JMS? Какие документы по этой теме вы бы порекомендовали?