Я разработал приложение для верблюдов, которое имеет возможности для общения с внешними системами через посредника Active MQ, и в настоящий момент я собираю короткую презентацию, чтобы показать, как она работает.Отправка ответного сообщения из сценария python
Для этого я выбрал python как внешнюю систему, так как он свободен, прост в установке и немного подвержен воздействию предыдущих сценариев jython. Что я хочу показать в своей презентации, так это то, что всякий раз, когда моя система отправляет сообщение внешнему клиенту через определенную очередь, этот клиент получит его для обработки и ответа на очередь «ответ на», как указано в сообщении заголовок.
Поэтому я немного изменил один из сценариев примера python, которые поставляются с Active MQ distribution. Здесь есть мой измененный скрипт:
import time
import sys
import os
import stomp
user = os.getenv("ACTIVEMQ_USER") or "admin"
password = os.getenv("ACTIVEMQ_PASSWORD") or "password"
host = os.getenv("ACTIVEMQ_HOST") or "localhost"
port = os.getenv("ACTIVEMQ_PORT") or 61613
destination = sys.argv[1]
class MyListener(stomp.ConnectionListener):
def __init__(self, receiver, sender):
self.receiver = receiver
self.sender = sender
self.count = 0
self.start = time.time()
def on_error(self, headers, message):
print('received an error %s' % message)
def on_message(self, headers, message):
if message == "SHUTDOWN":
diff = time.time() - self.start
print("Received %s in %f seconds" % (self.count, diff))
self.receiver.disconnect()
self.sender.disconnect()
sys.exit(0)
else:
if self.count==0:
self.start = time.time()
self.count += 1
if self.count % 1000 == 0:
print("Received %s messages." % self.count)
if 'reply-to' in headers:
replyTo = headers['reply-to']
response = '%s Python says: this is very good indeed' % self.count
self.sender.send(response, destination=replyTo, persistent='false')
sender = stomp.Connection(host_and_ports = [(host, port)])
sender.start()
sender.connect(login=user, passcode=password)
receiver = stomp.Connection(host_and_ports = [(host, port)])
receiver.set_listener('', MyListener(receiver, sender))
receiver.start()
receiver.connect(login=user, passcode=password)
receiver.subscribe(destination=destination, id=1, ack='auto')
print("Waiting for messages...")
while 1:
time.sleep(10)
Затем изнутри моей системы отправляю десять тысяч сообщений. Если я прокомментирую часть отправителя, я могу увидеть на выходе консоли, что клиент python получает все мои сообщения. Однако, как только я пытаюсь ответить назад Ia получаю сообщение об ошибке:
TypeError: send() got multiple values for argument 'destination'
UPDATE: Это полный стек трассировки я получаю
Waiting for messages...
Exception in thread Thread-2:
Traceback (most recent call last):
File "D:\Dev\python\lib\threading.py", line 920, in _bootstrap_inner
self.run()
File "D:\Dev\python\lib\threading.py", line 868, in run
self._target(*self._args, **self._kwargs)
File "D:\Dev\python\lib\site-packages\stomp\transport.py", line 317, in __receiver_loop
self.process_frame(f, frame)
File "D:\Dev\python\lib\site-packages\stomp\transport.py", line 166, in process_frame
self.notify(frame_type, f.headers, f.body)
File "D:\Dev\python\lib\site-packages\stomp\transport.py", line 227, in notify
rtn = notify_func(headers, body)
File "D:/work/cls-message-router/gradle/scripts/listener4.py", line 42, in on_message
self.sender.send(response, destination=replyTo, persistent='false')
TypeError: send() got multiple values for argument 'destination'
Можете ли вы пятну из что я делаю неправильно здесь и как его исправить. Мои знания python действительно очень ограничены, поэтому немного объяснений было бы очень желанным.
Заранее благодарим за входные данные.
Пожалуйста, добавьте полный ответ на свой вопрос. –