ActiveMQ-在不影响生产者的情况下限制队列中待处理消息的数量

时间:2018-09-08 16:59:03

标签: activemq

ActiveMQ 5.15.4

上下文:我正在使用的生产者发布到许多不同的队列。

我尝试过的事情:

1。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'gui.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_main_window(object):
    def setupUi(self, main_window):
        main_window.setObjectName("main_window")
        main_window.resize(971, 503)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(main_window.sizePolicy().hasHeightForWidth())
        main_window.setSizePolicy(sizePolicy)
        main_window.setMinimumSize(QtCore.QSize(971, 503))
        main_window.setMaximumSize(QtCore.QSize(971, 503))
        main_window.setBaseSize(QtCore.QSize(971, 503))
        main_window.setWindowOpacity(0.0)
        self.line = QtWidgets.QFrame(main_window)
        self.line.setGeometry(QtCore.QRect(10, 410, 951, 20))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.groupbox_frame = QtWidgets.QGroupBox(main_window)
        self.groupbox_frame.setGeometry(QtCore.QRect(10, 350, 465, 61))
        self.groupbox_frame.setObjectName("groupbox_frame")
        self.slider_video_frames = QtWidgets.QSlider(self.groupbox_frame)
        self.slider_video_frames.setGeometry(QtCore.QRect(14, 20, 431, 20))
        self.slider_video_frames.setMaximum(255)
        self.slider_video_frames.setOrientation(QtCore.Qt.Horizontal)
        self.slider_video_frames.setObjectName("slider_video_frames")
        self.label_frame_min = QtWidgets.QLabel(self.groupbox_frame)
        self.label_frame_min.setGeometry(QtCore.QRect(16, 40, 49, 15))
        self.label_frame_min.setObjectName("label_frame_min")
        self.label_frame_current = QtWidgets.QLabel(self.groupbox_frame)
        self.label_frame_current.setGeometry(QtCore.QRect(200, 40, 49, 15))
        self.label_frame_current.setText("")
        self.label_frame_current.setAlignment(QtCore.Qt.AlignCenter)
        self.label_frame_current.setObjectName("label_frame_current")
        self.label_frame_max = QtWidgets.QLabel(self.groupbox_frame)
        self.label_frame_max.setGeometry(QtCore.QRect(400, 40, 49, 15))
        self.label_frame_max.setText("")
        self.label_frame_max.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_frame_max.setObjectName("label_frame_max")
        self.groupbox_settings = QtWidgets.QGroupBox(main_window)
        self.groupbox_settings.setGeometry(QtCore.QRect(10, 428, 951, 71))
        self.groupbox_settings.setObjectName("groupbox_settings")
        self.button_load_avi = QtWidgets.QPushButton(self.groupbox_settings)
        self.button_load_avi.setGeometry(QtCore.QRect(10, 30, 84, 31))
        self.button_load_avi.setObjectName("button_load_avi")
        self.button_save_marks = QtWidgets.QPushButton(self.groupbox_settings)
        self.button_save_marks.setGeometry(QtCore.QRect(202, 30, 84, 31))
        self.button_save_marks.setObjectName("button_save_marks")
        self.button_create_plot = QtWidgets.QPushButton(self.groupbox_settings)
        self.button_create_plot.setGeometry(QtCore.QRect(582, 30, 84, 31))
        self.button_create_plot.setObjectName("button_create_plot")
        self.button_set_marks = QtWidgets.QPushButton(self.groupbox_settings)
        self.button_set_marks.setGeometry(QtCore.QRect(112, 30, 84, 31))
        self.button_set_marks.setObjectName("button_set_marks")
        self.line_3 = QtWidgets.QFrame(self.groupbox_settings)
        self.line_3.setGeometry(QtCore.QRect(470, 30, 20, 31))
        self.line_3.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_3.setObjectName("line_3")
        self.button_analyse = QtWidgets.QPushButton(self.groupbox_settings)
        self.button_analyse.setGeometry(QtCore.QRect(491, 30, 84, 31))
        self.button_analyse.setObjectName("button_analyse")
        self.line_2 = QtWidgets.QFrame(self.groupbox_settings)
        self.line_2.setGeometry(QtCore.QRect(92, 30, 20, 31))
        self.line_2.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.button_reset_marks = QtWidgets.QPushButton(self.groupbox_settings)
        self.button_reset_marks.setGeometry(QtCore.QRect(292, 30, 84, 31))
        self.button_reset_marks.setObjectName("button_reset_marks")
        self.button_quit = QtWidgets.QPushButton(self.groupbox_settings)
        self.button_quit.setGeometry(QtCore.QRect(860, 30, 81, 31))
        self.button_quit.setObjectName("button_quit")
        self.line_4 = QtWidgets.QFrame(self.groupbox_settings)
        self.line_4.setGeometry(QtCore.QRect(840, 30, 20, 31))
        self.line_4.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_4.setObjectName("line_4")
        self.line_5 = QtWidgets.QFrame(main_window)
        self.line_5.setGeometry(QtCore.QRect(482, 10, 16, 401))
        self.line_5.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_5.setObjectName("line_5")
        self.groupbox_threshold = QtWidgets.QGroupBox(main_window)
        self.groupbox_threshold.setGeometry(QtCore.QRect(505, 350, 457, 61))
        self.groupbox_threshold.setObjectName("groupbox_threshold")
        self.slider_threshold_value = QtWidgets.QSlider(self.groupbox_threshold)
        self.slider_threshold_value.setGeometry(QtCore.QRect(80, 23, 321, 20))
        self.slider_threshold_value.setMaximum(255)
        self.slider_threshold_value.setOrientation(QtCore.Qt.Horizontal)
        self.slider_threshold_value.setObjectName("slider_threshold_value")
        self.label_threshold_slider_name = QtWidgets.QLabel(self.groupbox_threshold)
        self.label_threshold_slider_name.setGeometry(QtCore.QRect(4, 24, 71, 16))
        self.label_threshold_slider_name.setObjectName("label_threshold_slider_name")
        self.label_threshold_value = QtWidgets.QLabel(self.groupbox_threshold)
        self.label_threshold_value.setGeometry(QtCore.QRect(404, 25, 49, 15))
        self.label_threshold_value.setText("")
        self.label_threshold_value.setObjectName("label_threshold_value")

        self.retranslateUi(main_window)
        self.slider_video_frames.valueChanged['int'].connect(self.label_frame_current.setNum)
        self.slider_threshold_value.valueChanged['int'].connect(self.label_threshold_value.setNum)
        QtCore.QMetaObject.connectSlotsByName(main_window)
        main_window.setTabOrder(self.slider_video_frames, self.slider_threshold_value)
        main_window.setTabOrder(self.slider_threshold_value, self.button_load_avi)
        main_window.setTabOrder(self.button_load_avi, self.button_set_marks)
        main_window.setTabOrder(self.button_set_marks, self.button_save_marks)
        main_window.setTabOrder(self.button_save_marks, self.button_reset_marks)
        main_window.setTabOrder(self.button_reset_marks, self.button_analyse)
        main_window.setTabOrder(self.button_analyse, self.button_create_plot)
        main_window.setTabOrder(self.button_create_plot, self.button_quit)

    def retranslateUi(self, main_window):
        _translate = QtCore.QCoreApplication.translate
        main_window.setWindowTitle(_translate("main_window", "Image Analysis"))
        self.groupbox_frame.setTitle(_translate("main_window", "Frame Settings:"))
        self.slider_video_frames.setToolTip(_translate("main_window", "Use this slider to go through all the frames."))
        self.label_frame_min.setText(_translate("main_window", "0"))
        self.groupbox_settings.setTitle(_translate("main_window", "Specific Frame adjustments:"))
        self.button_load_avi.setText(_translate("main_window", "Load .avi"))
        self.button_save_marks.setText(_translate("main_window", "Save marks"))
        self.button_create_plot.setText(_translate("main_window", "Create Plot"))
        self.button_set_marks.setText(_translate("main_window", "Set marks"))
        self.button_analyse.setText(_translate("main_window", "Analyse Video"))
        self.button_reset_marks.setText(_translate("main_window", "Reset Marks"))
        self.button_quit.setText(_translate("main_window", "Quit"))
        self.groupbox_threshold.setTitle(_translate("main_window", "How to process this frame:"))
        self.slider_threshold_value.setToolTip(_translate("main_window", "Use this slider to go through all the frames."))
        self.label_threshold_slider_name.setText(_translate("main_window", "Set threshold:"))

这可以正确地限制队列大小,但是会限制生产者,如here所述。这导致其他非问题性队列出现

2。

<policyEntry queue=">" producerFlowControl="true" memoryLimit="10 mb">
</policyEntry>

似乎并没有限制队列大小。

3。

我尝试使用 messageEvictionStrategy pendingMessageLimitStrategy ,但它们似乎不适用于队列,仅适用于主题。

我还缺少其他可能的策略吗?

1 个答案:

答案 0 :(得分:0)

您需要在消息上使用“生存时间”值来控制消息在队列中停留的时间,否则,代理将使用流控制阻止生产者,或者如果禁用消息,则将消息分页到磁盘。队列通常不用于固定大小的消息传递,因为队列上的假设是内容很重要,除非发件人通过TTL允许,否则不应丢弃。