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 Service Busが1つのサブスクリプションでしか動作しないと思います。(しかし、私はこの点については分かりません。

+0

'msg'を印刷するとどうなりますか?私の推測では、サービスバスから何も戻ってこないということです。 –

+0

正確には、私は何も持っていません:(あなたがトレースで見ることができるように、最初の行はメッセージの結果です:なし:( – jjmartinez

+0

と私はメッセージを受け取る必要があります(私はもちろん、私はPythonで待っているメッセージを受け取っています – jjmartinez

答えて

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: 
    ... 

はそれが役に立てば幸いません。

+0

Azure Service Busのサブスクリプションとフィルタに関する問題だと思うので、あなたの答えは正しいと思います。 – jjmartinez

+0

「データ==なし」または「データならば!=なし」?クエストだけがありますか? – jjmartinez

+1

@jjmartinez 'もしあなたが質問を更新しようとしたら、あなたの提案を私のコードに追加します! data!= None: '。私のミス。申し訳ありませんが、私は郵便番号を更新しました。 –

関連する問題