使用带有 stomp 的多个 header 标签提取数据

Extracting data using multiple header tags with stomp

我正在做一些将能源交易数据推送到 ActiveMQ 的工作。我正在使用 stomp.py 库来捕获数据。下面的代码有效并提取了所有带有数据标签 "BOALF" 的数据。我需要让代码搜索多个标签(总共 10 个)。例如标签 "BOD" 和 "SEL".

我需要重写代码:headers={'selector': "JMSType='BOALF'"},但我不确定如何包含多个标签,因为我的所有尝试都导致了错误。

import stomp
import time

class MyListener(stomp.ConnectionListener):

    def on_error(self, headers, message):
        print('received an error "%s"' % message)

    def on_message(self, headers, message):
        print(type(headers))
        for k, v in headers.items():
            print('header: key %s , value %s' % (k, v))
            print('received a message "%s"' % message)
            with open("messages.log", "a") as logfile:
                logfile.write(message)



conn = stomp.Connection12(host_and_ports=[('api.bmreports.com', 61613)], use_ssl=True)

conn.set_listener('', MyListener())
conn.start()

# Api key is being passed as both username and password.
conn.connect('XXXXXXXXXX', 'XXXXXXXXXX', True)
conn.subscribe(destination='/topic/bmrsTopic', ack='auto', id=545668, 
               headers={'selector': "JMSType='BOALF'"})

while conn.is_connected():
    time.sleep(1)

ActiveMQ 的 selector header 功能使用 JMS 1.1 规范中指定的 SQL 92 语法,并在 the JavaDoc 中描述 javax.jms.Message。在您的情况下,您可以这样做:

JMSType in ('BOALF','BOD','SEL')