频道栏目
首页 > 资讯 > 其他 > 正文

rabbitmq 手动发送basicAck()的作用

18-06-28        来源:[db:作者]  
收藏   我要投稿

rabbitmq 手动发送basicAck()的作用。

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后消息悉数收到,没有丢失。

相关TAG标签
上一篇:Android 软键盘弹出时覆盖了dialog部分内容
下一篇:动态计算Gridview的高度,宽度,将GridView居中实现代码
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站