3

Javaで記述された単純なAMQPサーバー/ブローカーの実装はありますか?

ローカル統合テストに使用する必要があります。ant / mavenから始めたいのですが、クラスタリング、永続性、パフォーマンスなどの機能は必要ありません。インストール(maven pomでの依存関係と同じように)と構成がない、単なるモックのRabbitMQのようなインスタンス。

4

3 に答える 3

3

MQ内で行われるすべてのことを含め、アプリケーション全体をテストする統合テスト/エンドツーエンドテスト/自動ユーザー受け入れテストを作成することは完全に合法だと思います。テストのフィードバックループが大幅に遅くなるため、このようなものを賢く起動するテストケースを選択する必要があります。

org.apache.qpidがあります。これは、mvn / gradle (mvn center)依存関係(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();
    }
};

すべてのアプリケーションにJetty9が含まれており、QPID(まだ)にはJetty <9が必要なため、これは機能しませんでした。

于 2016-04-01T22:55:09.030 に答える
1

探しているのはAMQPモックオブジェクトです。私は本当に何も知りませんし、あなたがすぐに見つけられることを疑っています。
テストとしてJUnitを使用している場合は、UNITテストを実行しています。単体テストは統合テストとは異なり、実際のキューへの読み取り/書き込みは含まれません。
たぶんここで、テストまたはコードを再構築して、キューへの読み取り/書き込み以外のすべてを含めることができますか?
もう1つのオプションは、移植性のためにAMQPを他のクラスにラップした場合、そのオブジェクトをモックすることです。

于 2010-04-25T22:52:57.323 に答える
1

2016年に私の回答を公開した後、つい最近、新しいオプションが私の注目を集めました。

RabbitMQ Mock(https://github.com/fridujo/rabbitmq-mock)プロジェクトは正確な目的を果たし、はるかに軽量です。まだ非常に若いプロジェクトですが(2018年5月に開始されたばかりです)、自分で統合テストに使用することができました。

モックが「本物」のように機能することを確認するために、最初にRabbitMQインスタンスに対してコードを実行し、その後モックに切り替えます。

于 2018-10-18T12:22:08.470 に答える