在Azure Service Bus

时间:2017-08-30 07:42:01

标签: python-3.x azureservicebus azure-servicebus-queues azure-servicebus-topics

我在Azure Service Bus使用Python 3.x开发时使用过滤器订阅主题,当我等待发送到该主题的信息(通过过滤器的信息)时,我无法收到它。

我需要创建一个始终在监听的守护进程,当我收到该信息时,我将其发送到我的应用程序的内部服务,因此接收器在循环内的一个线程中运行While True

我用来接收消息的代码如下:

while True:
    msg = bus_service.receive_subscription_message(topic_name, subscription_name, peek_lock=True)
    print('Mensaje Recibido-->',msg.body)
    data = msg.body
    send_MyApp(data.decode("utf-8"))
    msg.delete()

我运行它时得到的是下一个信息:

Message --> None
Exception in thread Thread-1:
Traceback (most recent call last):
File "..\AppData\Local\Programs\Python\Python36-32\lib\threading.py", line 916, in _bootstrap_inner
self.run()
File "..\AppData\Local\Programs\Python\Python36-32\lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "../Python/ServiceBusSuscription/receive_subscription.py", line 19, in receive_subscription
send_MyApp(data.decode("utf-8"))
AttributeError: 'NoneType' object has no attribute 'decode'

如果我从线程中运行接收器,这是它显示的错误消息(再次跳过超时,我应该删除哪个超时,因为在等待它的守护进程中它不能跳过)。基本上,它是同样的错误:

Traceback (most recent call last):
  File "../Python/ServiceBusSuscription/receive_subscription.py", line 76, in <module>
    main()
  File "../Python/ServiceBusSuscription/receive_subscription.py", line 72, in main
    demo(bus_service)
  File "../Python/ServiceBusSuscription//receive_subscription.py", line 25, in demo
    print(msg.body.decode("utf-8"))
AttributeError: 'NoneType' object has no attribute 'decode'

我没有收到我正在等待的信息,也没有收到服务总线超时(我没有编程)。

任何人都可以帮助我吗?微软的文档确实无济于事。

提前致谢

更新

我认为问题来自Azure Service Bus以及订阅和过滤器。实际上,我有23个过滤器,我认为Azure Service Bus只适用于1个订阅:(但我不确定这一点。

1 个答案:

答案 0 :(得分:1)

我尝试成功重现您的问题,然后我发现如果您的主题中没有消息,那么它就会出现问题。

因此,在解码msg.body的字节之前,您需要检查None的值是type(None)还是msg.body,如下所示。

data = msg.body
if data != None: 
# Or if type(data) == type(b''):
    send_MyApp(data.decode("utf-8"))
    msg.delete()
else:
    ...

希望它有所帮助。