rabbitmq 手动发送basicAck()的作用

1、测试提了个bug,学生端关闭wifi后,教师端发送签到、作业、资源,学生端打开wifi重新连上后 有一部分消息收不到

2、用网页端做个测试,学生端关闭wifi后,利用网页端连发3次 “{}”,如图:

rabbitmq 手动发送basicAck()的作用_第1张图片

3、注意到队列中的消息竟然被消费了,再看网页端:

rabbitmq 手动发送basicAck()的作用_第2张图片

4、打开wifi,果然没有收到消息,怎么可能。有可能是假连接,但是消息却显示被消费掉了也是可以啊。

5、又试了几次,注意到当publish message 上面的模块 consumers下channel消失的之后,发送的数据学生端就都可以收到了。如下图:

rabbitmq 手动发送basicAck()的作用_第3张图片

6、学生能够接收到的消息,打开wifi之前消息状态如下图:

rabbitmq 手动发送basicAck()的作用_第4张图片

7、猜测有可能是消息接收机制有问题,改手动发送"消息确认"机制。

globalReceiveCh.basicConsume(common.userId, false, new RabbitMessageListener(globalReceiveCh));
public class RabbitMessageListener extends DefaultConsumer {
    public static String TAG = RabbitMessageListener.class.getSimpleName();
    Channel sendACKChannel;

    public RabbitMessageListener(Channel channel) {
        super(channel);
        sendACKChannel = channel;
    }

    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
        String message = new String(body, "UTF-8");
        sendACKChannel.basicAck(envelope.getDeliveryTag(), false);
        System.out.println("全局消息channel handleDelivery: " + message);

8、果然好使了,学生端断开wifi后教师发给学生的消息状态是这样的:

rabbitmq 手动发送basicAck()的作用_第5张图片

9、学生打开wifi后消息悉数收到,没有丢失。





你可能感兴趣的:(rabbitmq 手动发送basicAck()的作用)