Azure Functions で Queue が書けない、取れないとき


前提

  • Visual Studio 2017 Update 3
  • Azure Functions
  • QueueTrigger

現象

  • Queue が取れない
  • ポータルで refresh してもメッセージが見えない
  • もしかして Queue が書けていない???
  • エラーは出ていない

原因

  • 同じ Queue を取り合っている
    • ローカルの function 同士
    • ローカルの function と Azure 上の function
  • つまり、書けているが、他の function に取られている

対策

  • 不要な function は止めよう
  • function の止め方を調べてみました

Azure で function を止める

  1. ステータス無効 にする
  2. アプリケーションを 再開 する ( これを忘れがち )

ローカルの function を止める

  • DisableAttribute を付ける
[Disable]
public static class Function1
{
    ...

または、

[FunctionName("Function1"), Disable]
public static void Run([QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")]string myQueueItem, TraceWriter log)
{
    ...

ローカルの function を止める ( 別解 )

  • NoAutomaticTriggerAttribute を付ける
[FunctionName("Function1"), NoAutomaticTrigger]
public static void Run([QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")]string myQueueItem, TraceWriter log)
{
    ...

属性

他にどんな属性があるか調べてみました。まず、入力/出力バインドは次のページを参照してください。


入力/出力バインド以外の属性一覧

Target Attribute
Class, Method, Parameter DisableAtrribute
Class, Method, Parameter ServiceBusAccountAttribute
Class, Method, Parameter StorageAccountAttribute
Class, Method FunctionExceptionFilterAttribute
Class, Method FunctionInvocationFilterAttribute
Class, Method TimeoutAttribute
Class, Method TraceLevelAttribute
Class BindingAttribute
Class ConnectionProviderAttribute
Method FunctionNameAttribute
Method NoAutomaticTriggerAttribute
Method SingletonAttribute