Простой Java AMQP сервер - PullRequest
3 голосов
/ 26 апреля 2010

Есть ли какая-либо простая реализация сервера / брокера AMQP, написанная на Java?

Мне нужно использовать его для локальных интеграционных тестов. Я хотел бы начать с ant / maven, и мне не нужны такие функции, как кластеризация, постоянство, производительность и так далее. Просто макет RabbitMQ-подобного экземпляра, без установки (как зависимость в maven pom) и конфигурации.

Ответы [ 3 ]

3 голосов
/ 02 апреля 2016

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

Существует org.apache.qpid , который вы можете просто включить в свое приложение как mvn / gradle (mvn central) зависимость (пример gradle):

testCompile 'org.apache.qpid:qpid-broker:6.0.1'

, а затем добавьте Rule, содержащий ExternalResource, который запускает брокера перед вашими тестами, что несколько похоже на эту довольно простую настройку:

@Rule
private static final ExternalResource embeddedAMQPBroker = new ExternalResource() {
    Broker broker;

    @Override
    protected void before() throws Throwable {
        BrokerOptions brokerOptions = new BrokerOptions();
        brokerOptions.setConfigProperty("qpid.amqp_port", "55672");
        broker = new Broker();
        broker.startup(brokerOptions);
    }

    @Override
    protected void after() {
        broker.shutdown();
    }
};

Не проверено, поскольку для меня это не сработало, поскольку все мои приложения содержат Jetty 9, а для QPID (все еще) требуется Jetty <9. </em>

1 голос
/ 18 октября 2018

После публикации моего ответа в 2016 году, недавно мне стало известно о новой опции:

RabbitMQ Mock (проект https://github.com/fridujo/rabbitmq-mock) служит точным целям и намного легче по весу. Это еще очень молодой проект (начался только в мае 2018 года), но я смог использовать его для интеграции проверяю себя.

Чтобы убедиться, что макет работает как «настоящая вещь», я сначала запускаю свой код для экземпляра RabbitMQ, а затем переключаюсь на макет.

1 голос
/ 26 апреля 2010

То, что вы ищете - это AMQP Mock Object. Я действительно ничего не знаю и сомневаюсь, что вы найдете их с полки.
Если вы используете JUnit для тестирования, то вы проводите UNIT-тестирование. Модульное тестирование отличается от интеграционного тестирования и не включает в себя чтение / запись в очередь.
Может быть, здесь вы могли бы реструктурировать свой тест или даже код, включив в него все, кроме чтения / записи в очередь?
Другой вариант - если вы поместили свой AMQP в какой-то другой класс для переносимости, просто смоделируйте этот объект.

...