AMQ から python にメッセージをプルしたい。バッチ処理に Python を使用したい (キューに 1000 個のメッセージがある場合、100 個のメッセージごとにキューから取り出して処理し、次の 100 個のメッセージを取得して処理する必要があります...すべてのメッセージがキューから取り出されるまで)。
これがbatchListenerの私のpythonコードです:
class BatchEventListner(stomp.ConnectionListener):
def on_message(self, headers, message):
print('received a message "%s"' % message)
batchLsnr = BatchEventListner()
self.conn = stomp.Connection(host_and_ports=hosts)
self.conn.set_listener('', batchLsnr)
self.batchLsnr = batchLsnr
self.conn.start()
self.conn.connect('username', 'password', wait=True)
self.conn.subscribe(destination='/queue/' + self.queue_name, id=1, ack='auto')
メッセージを AMQ にプッシュするシミュレーターを作成しました。1000 メッセージを ActiveMQ にプッシュしたら、コンシューマーが起動すると、Python コードは ActiveMQ からデータをプルし始めますが、Python コードは一度に 100 を超えるメッセージをプルしています。(処理は 100 に対してのみ行われますが、100 を超えるメッセージがキューから取り出されています)。つまり、最後のバッチ (100 メッセージ) では、ActiveMQ でメッセージが表示されていませんが、メッセージは Python プロセスで取得されています。
1. ActiveMQ からのデキュー中に、stomp はメッセージを保持しますか? 2. バッチの処理中に、stomp はデータを保持しますか?