将消息循环发送到Windows Rabbitmq代理时出现问题

时间:2018-10-08 07:35:07

标签: rabbitmq spring-rabbitmq

我的设置

  • 我遇到这样的情况,我正在通过Rabbitmq从一台机器向另一台机器循环发送约15条消息。

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

  • 我正在对所有Rabbitmq操作使用spring 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。

在SettingsListener类中,我收到消息。在我开发的其他代码中,这对我所有人都很好。仅在我提到的这种用例中,我才观察到这个问题。

1 个答案:

答案 0 :(得分:0)

  

这是否意味着发布者确认引入了概念,因为Rabbitmq有时可能会“拒绝/不接受”消息。经过发布者的确认,我们可以知道第一条消息是否由Rabbitmq经纪人收到,然后发送第二条消息。

     

我们可以得出结论吗?

不,您不能;等待每一次确认都会减慢发布速度;确认邮件是经过设计的,因此您可以发送一堆消息,然后等待确认邮件。

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

NAT应该没有什么区别,但是也许是一些不稳定的网络路由器可能是问题所在。

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