【问题标题】:python stomp receive number of messages from activemqpython stomp 从 activemq 接收消息数
【发布时间】:2018-07-19 22:02:03
【问题描述】:

是否可以只接收来自activemq的一些消息。

假设我只需要从队列中接收 100 条消息,这可能吗?

我正在使用消息监听方法,有没有其他方法可以接收消息。

示例代码sn-p:

queue_messages = []

class SampleListener(object):
    def on_message(self, headers, msg):
        queue_messages.append(msg)
def read_messages():
    queue_connection = stomp.Connection([(activemq_host, int(activemq_port))])
    queue_connection.start()
    queue_connection.connect('admin', 'admin')
    queue_connection.set_listener('SampleListener', SampleListener())
    queue_connection.subscribe(destination=activemq_input_q, id=1, ack='auto')
    time.sleep(1)
    queue_connection.disconnect()

read_messages()

【问题讨论】:

  • 为什么不限制on_messageif len() == 100 停止追加,disconnect()
  • 我也试过了..但它消耗了超过 1000 条消息,但列表只包含 100 条消息。剩下的邮件丢失了
  • 添加说明

标签: python activemq stomp


【解决方案1】:

您为什么不分享您的问题而不是您心中的解决方案?问题可能不是您想的那样,或者有更好的解决方案。

要回答您的问题,是的,您可以。对于 ActiveMQ 情况,您可以在订阅队列时添加额外的标头,例如 {'activemq.prefetchSize':100},ans set ack='client'。但是您根本不承认这些消息。结果是您收到的消息不会超过 100 条。

我必须说这是一个尴尬的解决方案。您的代码最终将消耗队列中的前 100 条消息,仅此而已。您显然可以断开连接并重新订阅同一个队列以接收接下来的 100 条消息。

【讨论】:

    【解决方案2】:

    当 ack='client' 并且我没有在 on_message 事件上确认消息时,当实际确认将发送到服务器时,它是否会在成功断开连接时发送确认。

    另外,如果我突然终止脚本,仍然会发送确认,我会错过消息

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 2018-08-22
      • 2021-11-22
      • 2019-08-18
      • 2019-07-02
      • 2019-02-08
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多