我的设置
我遇到这样的情况,我正在通过Rabbitmq从一台机器向另一台机器循环发送约15条消息。
在发送和接收计算机之间有 NAT设置。
我正在对所有Rabbitmq操作使用spring Rabbitmq。
在接收方机器上,我丢失了2条消息有时,即使等待很长时间也从未收到。
而且我也看不到队列中(发送方计算机和接收方计算机中)都累积了任何消息。
在接收方机器中也只有队列的侦听器。
我的问题
即使我执行了向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。
在SettingsListener类中,我收到消息。在我开发的其他代码中,这对我所有人都很好。仅在我提到的这种用例中,我才观察到这个问题。
答案 0 :(得分:0)
这是否意味着发布者确认引入了概念,因为Rabbitmq有时可能会“拒绝/不接受”消息。经过发布者的确认,我们可以知道第一条消息是否由Rabbitmq经纪人收到,然后发送第二条消息。
我们可以得出结论吗?
不,您不能;等待每一次确认都会减慢发布速度;确认邮件是经过设计的,因此您可以发送一堆消息,然后等待确认邮件。
它不是>introduced because sometimes rabbitmq may "reject/not accept" messages
;使用RabbitMQ发布是异步的;因此,发布通常是成功的-但在发送消息与到达代理之间可能会发生任何事情-如果连接丢失,则会告知客户端,但这对于发布者来说为时已晚,因为他已经成功完成了发布。
NAT应该没有什么区别,但是也许是一些不稳定的网络路由器可能是问题所在。
您可以使用网络监视器(例如WireShark)查看正在发生的事情。