1、测试提了个bug,学生端关闭wifi后,教师端发送签到、作业、资源,学生端打开wifi重新连上后 有一部分消息收不到
2、用网页端做个测试,学生端关闭wifi后,利用网页端连发3次 “{}”,如图:

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

4、打开wifi,果然没有收到消息,怎么可能。有可能是假连接,但是消息却显示被消费掉了也是可以啊。
5、又试了几次,注意到当publish message 上面的模块 consumers下channel消失的之后,发送的数据学生端就都可以收到了。如下图:

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

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后教师发给学生的消息状态是这样的:

9、学生打开wifi后消息悉数收到,没有丢失。
本文描述了一个在线教育应用中,学生设备在Wi-Fi断开后无法正常接收教师发送的消息的问题。通过测试发现,消息队列中的消息被误认为已消费,导致学生端无法接收到这些消息。通过调整消息确认机制,最终解决了该问题。

1049

被折叠的 条评论
为什么被折叠?



