私はウサギの送信者と受信者を持つ簡単なスプリングブートアプリケーションを持っています。私は、受信者が同じメッセージを受信したかどうかを確認するために、受信者テストを書いて、Junitクラスルール(RabbitContainerRule)としてrabbitmq dockerインスタンスを実行してから、rabbitTemplateを使用してメッセージを送信します。しかし、私は次の例外取得しています:私は、管理コンソールを使用してドッキングウィンドウインスタンスに(ブレークポイントで停止することによって)手動でキューを作成した場合bean 'org.springframework.amqp.rabbit.config.internalRabbitListenerEndpointRegistry'を開始できませんでした。
Caused by: org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.amqp.rabbit.config.internalRabbitListenerEndpointRegistry'; nested exception is org.springframework.amqp.AmqpIllegalStateException: Fatal exception on listener startup
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178)
Caused by: org.springframework.amqp.rabbit.listener.QueuesNotAvailableException: Cannot prepare queue for listener. Either the queue doesn't exist or the broker will not allow us to use it.
at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:599)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1424)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'my-message-queue' in vhost '/', class-id=50, method-id=10)
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)
を、私のテストは合格します。
また、ドッカーのウサギインスタンスを使用して手動でテストすると、私のスプリングブートアプリケーションが正常にキューを作成します。だから、それはテストで作成しない原因になっている?
私は春、AMQP 1.7.4 RELEASEを使用しています
レシーバーコード:
また、私はコンフィギュレーションで 私のメッセージキューのための任意の@Beanを作成し、依存しているわけではない@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "my-message-queue", durable = "true",
arguments = {
@Argument(name = "x-dead-letter-exchange", value = "my-message-exchange-dead-letter"),
@Argument(name = "x-dead-letter-routing-key", value = "my-message-queue")}),
exchange = @Exchange(value = "my-message-exchange", type = "topic", durable = "true"),
key = "my-message-rk")
)
public void handleMessage(MyMessage message) {
MESSAGE_LOG.info("Receiving message: " + message);
}
@RabbitListenerに私のためのものを作成してください。しかし、私は自分の設定でConnectionFactory、RabbitTemplate、SimpleRabbitListenerContainerFactory Beanを作成しています。
あなたは 'RabbitAdmin' Beanを持っていますか? –
GitHubのどこかでアプリケーション全体を共有するのはどうですか? –
ありがとうArtem。テスト設定でRabbitAdmin Beanを追加すると、この問題が解決されました。また、設定ファイルに@EnableRabbitがありませんでした。 – agill