0

我一直在将我的开发环境从 Linux 转移到 Mac,突然间我面临着奇怪的 RabbitMQ 行为。

我有 Ubuntu 盒子,在上面运行 RabbitMQ 2.8.7-1,我在同一个盒子上做了开发工作。我一直在运行我的测试代码(如下所示),Rabbit 很高兴收到所有消息。

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

现在我搬到了 Mac 机器(主机 A),我在其中运行带有 Linux 的 VirtualBox(主机 B),在该机器上运行 RabbitMQ,其配置与以前的 Linux 机器相同。我在 Mac 上运行我的开发环境,它在 VM 中调用 Rabbit :)。但是什么也没来,所以我使用 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]

我完全不知道从哪里开始解决问题,为什么它以前可以工作而不是现在,问题可能出在哪里?

编辑:好的,我尝试从 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 处挂起。

一段时间后,我意识到我的硬盘几乎已满(不记得了,但大约有 200MB 的可用空间)。我释放了一些空间,这很有帮助。

于 2012-12-06T00:50:01.957 回答