在Azure服务总线上接收有关主题订阅的信息
我订阅了使用Azure Service Bus
中的过滤器的主题并使用Python 3.x
开发,当我等待发送到该主题的信息(通过过滤器的信息)时,我无法接收它。在Azure服务总线上接收有关主题订阅的信息
我需要创建一个守护进程总是听,当我收到信息,我把它发送到我的应用程序的内部服务,所以接收机在一个线程中运行循环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'
我没有收到我在等待的信息,并且还跳过一个服务总线超时(我还没有编程)。
任何人都可以帮助我吗?微软的文档并没有太大帮助。
在此先感谢
UPDATE
我认为这个问题是从Azure的服务总线和订阅和过滤器。其实,我有23个过滤器,我认为Azure服务总线只能用于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:
...
希望它能帮助。
我认为你的回答是正确的,因为我认为问题是关于Azure Service Bus中的订阅和过滤器, m会更新这个问题,我会将你的建议添加到我的代码中,谢谢! – jjmartinez
只有questio,是“if data == None”还是“if data!= None”? – jjmartinez
@jjmartinez'if data!= None:'。对不起,我的错误,我有更新我的邮政编码。 –
当你打印'msg'时会发生什么?我的猜测是你没有从服务总线获得任何回报。 –
确切的说,我没有任何东西:(正如你可以在跟踪中看到的,第一行是消息的结果:无:( – jjmartinez
)我应该收到消息(因为我使用其他应用程序发送消息,当然)另外,我使用Java开发了相同的代码,并收到了我在Python中等待的消息 – jjmartinez