我在C ++中使用消息队列模板来排队我的消息,这些消息恰好排队SIP消息。我的队列大小是固定的,当我增加消息的速率和数量时,我能够检测到消息队列中的溢出流
我想避免消息队列溢出。因此,如果有人可以在消息队列中指导我实际的溢出避免技术,那将会有所帮助。
关于流行的POSIX消息队列溢出避免的建议也很受欢迎,因为我会从中获得一些想法。
答案 0 :(得分:3)
您可以检测溢出情况,这很棒。接下来,您只需要在溢出时定义行为。通常有两种选择:阻止或失败。
溢出失败很明显,阻塞队列需要一个互斥和条件变量:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.button_click));
}
}
当队列被消耗且不再溢出时,请<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale = "1"
android:toXScale = "0.9"
android:fromYScale = "1"
android:toYScale = "0.9"
android:pivotX="50%"
android:pivotY="50%"
android:duration = "50">
</scale>
</set>
。
答案 1 :(得分:1)
您通常对消息传递队列所拥有的不是溢出 - 因为溢出太晚了。你有像High Watermark这样的东西。 (Low Watermakr也值得一提,因为当你在Low Watermark上保持一致意味着你可能有太长的队列或太多的处理程序)。
点击High Watermark后,您会向用户发出信号。您还可以实现多种策略,从而依赖于消息的语义。例如,您可能会开始跳过每一条消息。您可以使用溢出缓冲区&#39; - 极其轻量级的处理程序,它只是简单地读取队列中的所有消息并将它们存储在某种缓冲区中,可以像文件一样简单,以便以后处理。你可能会做很多事情,但是你再次在High Watermark上做,而不是在队列已经满了的时候。