循环向 Windows rabbitmq 代理发送消息时出现问题



我的设置

  • 遇到这样一种情况,即我通过 rabbitmq 从一台机器循环向另一台机器发送大约 15 条消息。

  • 发送和接收计算机之间有NAT 设置

  • 我正在使用Spring rabbitmq进行所有rabbitmq操作。

  • 在接收机器上,我有时会丢失 2 条消息,即使等待很长时间也从未收到。

  • 而且我没有看到队列中累积的任何消息(在发送机和接收机中(。

  • 而且接收机器中只有队列的侦听器。

我的问题

  • 如果我循环向 RabbitMQ 发送消息,如果它无法处理,它是否有可能拒绝某些消息?15 条消息的总大小接近 8mb。

即使在我执行向 rabbitmq 发送消息后,我也没有看到任何异常。

发送机器代码

@Override
public boolean send(final Message message, final String routingKey)
throws SinecnmsMessagingException {
private RabbitTemplate rabbitTemplate = null;
rabbitTemplate.send(routingKey, message);
}

接收机器代码

<rabbit:listener-container
connection-factory="connectionFactory">
<rabbit:listener ref="onMessageCommand"
queue-names="TestQueue" />
</rabbit:listener-container>
<bean id="onMessageCommand"
class="com.test.OnMessageListner">
<property name="callBackObject" ref="callbackEvent" />
<property name="template" ref="amqpTemplate" />
</bean>
<bean id="callbackEvent" class="com.test.SettingsListener"></bean>

OnMessageListner实现了MessageListener。

在设置侦听器类中,我收到消息。这在我开发的其他代码中对我的所有人来说都很好用。只有在我提到的这个用例中,我才观察到这个问题。

这是否意味着发布者确认引入了概念,因为有时 rabbitmq 可能会"拒绝/不接受"消息。通过发布者确认,我们可以知道第一条消息是否被 rabbitmq 代理接收,然后发送第二条消息。

我们能得出这个结论吗?

不,你不能;等待每个确认会减慢发布速度;确认被设计成让你发送一堆消息,然后等待确认。

这不是>introduced because sometimes rabbitmq may "reject/not accept" messages;使用 RabbitMQ 发布是异步的;所以发布通常是成功的 - 但是在发送消息和到达代理之间可能发生任何事情 - 如果连接丢失,客户端被告知,但这对发布者来说为时已晚,因为他已经成功完成了。

NAT应该没有区别,但也许,一些片状的网络路由器可能是问题所在。

您可以使用网络监视器(例如WireShark(来查看正在发生的事情。

最新更新