0

開発環境を Linux から Mac に移行したところ、突然、RabbitMQ の奇妙な動作に直面しました。

RabbitMQ 2.8.7-1 が実行されている Ubuntu ボックスがあり、同じボックスで開発作業を行いました。私はテストコード (以下に提供) を実行しており、Rabbit はすべてのメッセージを喜んで受信しました。

// using spring-rabbit 1.1.1.RELEASE
AmqpTemplate amqpTemplate = (AmqpTemplate) context.getBean("amqpTemplate");
amqpTemplate.convertAndSend("bar.queue", "Foo message");

ここで、以前の Linux ボックスと同じ構成で RabbitMQ を実行する Linux (ホスト B) で VirtualBox を実行している Mac ボックス (ホスト A) に移動しました。VM内でRabbitを呼び出すMacで開発環境を実行しています:)。しかし、何も来なかったので、Wireshark を使用して通信を追跡しました。

. . . .
B > A: Connection.Start
A > B: Connection.Start-Ok
B > A: Connection.Tune
A > B: Connection.Tune-Ok
A > B: Connection.Open
B > A: Connection.Open-Ok
A > B: Channel.Open
B > A: Channel.Open-Ok
A > B: Basic.Publish (bar.queue)
A > B: Content-Header (text/plain)
A > B: Content-Body (Foo message)
A > B: Channel.Close (200-OK)
B > A: [[TCP ACK for Channel.Close]]
. . . .

メッセージが受信されたようですが、ブローカーによって処理されていない可能性がありますか? クライアント側にログオンすると、メッセージが公開されたことがわかります。

17:09:37.450 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'amqpTemplate'
17:09:37.576 [main] DEBUG o.s.a.r.c.CachingConnectionFactory - Creating cached Rabbit Channel from AMQChannel(amqp://guest@hostB:5672/,1)
17:09:37.611 [main] DEBUG o.s.amqp.rabbit.core.RabbitTemplate - Executing callback on RabbitMQ Channel: Cached Rabbit Channel: AMQChannel(amqp://guest@hostB:5672/,1)
17:09:37.612 [main] DEBUG o.s.amqp.rabbit.core.RabbitTemplate - Publishing message on exchange [], routingKey = [bar.queue]

問題の処理を開始する場所がまったくわかりません。以前は機能していたのに、現在は機能していないのはなぜですか。どこに問題がある可能性がありますか?

編集: OK、RabbitMQ チュートリアルから単純な送信者を実装しようとしましたが、アプリケーションがまだ実行されており、close() の後のコードに到達していないため、close() でハングしているようです。

channel.basicPublish(exchangeName, routingKey, MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);
channel.close();
// this is never reached and app still running :-o
conn.close();
4

1 に答える 1

1

VirtualBox の空きディスク容量はどれくらいですか?

これは私の問題と非常によく似ています。Windows 7 x64 で C# から BasicPublish メソッドを呼び出していました。同じマシンにインストールされた RabbitMQ。コードはあなたと同じ行にぶら下がっていました。BasicPublish を TxSelect メソッドと TxCommit メソッドの間に配置すると、プログラムが TxCommit でハングしていました。

しばらくすると、HDD がほぼいっぱいになっていることに気付きました (よく覚えていませんが、約 200MB の空き容量がありました)。私はいくつかのスペースを解放し、それが助けになりました。

于 2012-12-06T00:50:01.957 に答える