0

我订阅了使用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订阅:(但我不确定这一点。

+0

当你打印'msg'时会发生什么?我的猜测是你没有从服务总线获得任何回报。 –

+0

确切的说,我没有任何东西:(正如你可以在跟踪中看到的,第一行是消息的结果:无:( – jjmartinez

+0

)我应该收到消息(因为我使用其他应用程序发送消息,当然)另外,我使用Java开发了相同的代码,并收到了我在Python中等待的消息 – jjmartinez

回答

1

我试图成功地重现您的问题,然后我发现它会发生,如果有你的话题没有消息。

所以你需要检查的msg.body值或类型是否解码之前Nonetype(None)msg.body字节,如下图所示。

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

希望它能帮助。

+0

我认为你的回答是正确的,因为我认为问题是关于Azure Service Bus中的订阅和过滤器, m会更新这个问题,我会将你的建议添加到我的代码中,谢谢! – jjmartinez

+0

只有questio,是“if data == None”还是“if data!= None”? – jjmartinez

+1

@jjmartinez'if data!= None:'。对不起,我的错误,我有更新我的邮政编码。 –

相关问题