とある情報共有用なので説明を省略しまくってますが、まずやりたいことは以下。
- Console App で Service Bus の キュー にメッセージを投げる
- Service Bus の キュー にメッセージが入ったのトリガーに動く Logic Apps で、Storage の キュー に投げる
ってやる時の注意点です。
(あまり詳しく見てないのでもっとよいプラクティスがあるかも。)
Logic Apps の設定
超ざっくりな説明ですが、Service Bus の QueueトリガーのLogic Appsを作って、Storage の Queueに投げる際のメッセージには、以下の式を設定します。
json(base64ToString(triggerBody()?['ContentData']))
base64エンコードの式を使わないとエラーになりますが、エラーで表示されるContentをみればbase64エンコード必要だって察することができます♪
Console App で Service Bus に Queue なげる
Console から SDK(Nuget: WindowsAzure.ServiceBus v4.1.6)を使ってQueueを投げてます。 メッセージを作る際、json を string で以下のように作ると、Logic Appではうまく認識できなかったです....
// こんなオブジェクトをjsonにして送る例... var item = new Item { id = Guid.NewGuid().ToString(), name = "FromSB", price = 444 }; var json = JsonConvert.SerializeObject(item); // うまくいかん! var message = new BrokeredMessage(json);
具体的には、Logic Apps側のStorageのQueueに投げるところで以下のエラーがでます。
InvalidTemplate. 行 '1'、列 '2735' のアクション 'キューにメッセージを入れます' 入力でテンプレート言語式を処理できません: 'テンプレート言語関数 'json' のパラメーターが無効です。指定した値 '@string3http://schemas.microsoft.com/2003/10/Serialization/�I{"id":"59835c93-0950-4f16-8f36-28e80f3b2638","name":"FromSB","price":444}' を解析できません: 'Unexpected character encountered while parsing value: @. Path '', line 0, position 0.'。使用方法の詳細については、https://aka.ms/logicexpressions#json をご覧ください。
値に明らかに変な文字があるなーって感じなので、MemoryStream でメッセージを作ってあげると正常に動きました。
// こんなオブジェクトをjsonにして送る例... var item = new Item { id = Guid.NewGuid().ToString(), name = "FromSB", price = 444 }; var stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(item))); var message = new BrokeredMessage(stream);
とりあえず問題なく動作しますが、詳しいことはドキュメントでもみないとわからんかなーって感じでしょうか。 ってかAzure の Paas 周りは仕事で使ってますが、Logic Apps と Service Bus は(実は)初めてさわったので何も知らん....
Logic Apps王子の縄神さま(Ahf)に、今度あった時に聞いてみよう思った今日この頃でした♪
そしてこれ書いてるときに iPhone Xが届いたー♪