Как заставить компилятор запретить мне использовать любые расширения RabbitMQ AMQP?

Я планирую использовать RabbitMQ в качестве реализации AMQP в своем проекте. Но я хотел бы ограничиться использованием только спецификации AMQP и не использовать какие-либо расширения RabbitMQ для AMQP. .

Есть ли способ оставить эту проверку «безопасности спецификаций» компилятору? Например: если была библиотека RabbitMQ, предназначенная только для AMQP, то, включив только эту библиотеку, я могу предоставить компилятору жаловаться каждый раз, когда я пытаюсь использовать расширение (поскольку он не может найти определение/реализация для этого расширение в библиотеке только для спецификации AMQP).

Я хочу сделать это так, чтобы, если я попытаюсь переключиться на другую реализацию AMQP, это было бы проще! (Я планирую использовать Spring Integration, чтобы абстрагироваться от базовой реализации AMQP).


person 2020    schedule 03.05.2013    source источник


Ответы (1)


Я бы сначала проконсультировался с ребятами из Кролика...

https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss

Абстракции Spring просто располагаются поверх Java-клиента RabbitMQ.

Хотя Spring-AMQP (и, следовательно, Spring Integration) обеспечивает общую абстракцию над AMQP, в настоящее время у нас есть только конкретная реализация Rabbit. Он может работать или не работать с другими брокерами в той мере, в какой это будет делать клиент RabbitMQ.

Мы будем рады вкладу в другие реализации абстракции, если это необходимо.

person Gary Russell    schedule 03.05.2013
comment
да. это вопрос rabbitmq, а не Spring. Ваше заявление it[Spring-AMQP] может работать или не работать с другими брокерами. меня пугает, учитывая, что это сделано членом команды интеграции Spring! Но я ценю честность! Может быть, я наивен, думая, что такой проект, как Spring-AMQP, должен ограничиваться спецификацией AMQP и игнорировать пользовательские расширения реализаций! - person 2020; 04.05.2013
comment
Если я просто использую методы Spring AmqpTemplate (а не те, которые добавлены RabbitTemplate), то, даже если я создаю экземпляр RabbitTemplate, я смогу избежать зависимостей от реализации AMQP? - person 2020; 04.05.2013
comment
Я имею в виду, что мы используем лежащий в основе Java-клиент Rabbit; Spring-AMQP будет работать с другими брокерами в той мере, в какой Java-клиент Rabbit будет работать с другими брокерами. Spring-AMQP задуман как механизм, обеспечивающий абстракцию над любым java-клиентом; с общей абстракцией в проекте spring-amqp и абстракцией над java-клиентом RabbitMQ в проекте spring-rabbit. Если клиент Rabbit по какой-то причине не работает для вас (с каким-либо другим брокером), то проект spring-xxx может обеспечить это, сохраняя при этом согласованный API для приложений. - person Gary Russell; 04.05.2013
comment
Это похоже на модуль spring-integration-sftp, использующий библиотеку Jsch; если кто-то хочет использовать другую библиотеку, для этого есть абстракции, но кому-то нужно будет написать реализацию. - person Gary Russell; 04.05.2013
comment
Последний пункт. Это не вопрос «честности». Я думаю, вы, возможно, упускаете из виду тот факт, что, в отличие от JMS, AMQP НЕ является Java API; это проводной протокол, который определяет структуру связи. В спецификации AMQP нет стандартного API Java, который может обеспечить любой компилятор Java. Обратите внимание, что страница, которую вы цитируете, называется «Расширения протокола». У Rabbit есть Java (и другие) API, которые реализуют протокол по сети. Spring-AMQP имеет реализацию, которая использует этот API, и приложила все усилия, чтобы предоставить абстракцию, которая позволит подключать другие API. - person Gary Russell; 04.05.2013
comment
Спасибо ! Ваш ответ проясняет подход Spring. И я оставлю свой вопрос открытым для экспертов/разработчиков RabbitMQ, чтобы сказать, решит ли RabbitMQ мою проблему каким-либо образом. - person 2020; 08.05.2013