【面试题】网络收集的面试题

2019-10-22  本文已影响0人  长孙俊明

丢消息怎么办?

场景是这样。非持久化消息堆积到一定程度会写到文件里,这个过程会阻塞所有的操作,持续20到30秒。当客户端发送消息完调用close时,会期待服务端响应,如果超过15秒后还没回答,直接调用socket的close关闭tcp连接。这时,客户端发送的消息还在服务端的缓存中等待处理,不过由于心跳包的设置,会导致发生socket异常,把缓存中的数据作废掉,没处理的效果会丢失。
解决方法

  1. 增加机器,及时消费数据。
  2. 非持久化数据变成持久化数据。

持久化消息非常慢。

默认情况下,非持久化数据是异步发送,持久化数据是同步发送。但是在开启事务之后,消息都是异步发送。所以在发送持久化数据时,也开启事务模式。

消息不均匀消费。

解决方法是设置prefetch设为1,每次处理1条消息,处理完再取。

上一篇下一篇

猜你喜欢

热点阅读