【问题标题】:How to trigger a ServiceBusTrigger?如何触发 ServiceBusTrigger?
【发布时间】:2018-11-05 17:13:39
【问题描述】:

我有一个 Azure WebJob,里面有类似的代码:

public class Functions
{
    public static void GenerateImagesForViewer(
    [QueueTrigger("resize-images-queue")] BlobInformation blobInfo,
    [Blob("unprocessed-pdf-storage-container/{BlobName}", FileAccess.Read)] Stream input,
    [Blob("unprocessed-pdf-storage-container/{BlobNameWithoutExtention}-pdf.jpg")] CloudBlockBlob outputPdf)
    {            
        //Do something here
        string connectionString = "myConnectionString";
        TopicClient Client = 
        TopicClient.CreateFromConnectionString(connectionString, "resize- 
        images-topic");
        var topicMessage = new BrokeredMessage(blobInfo);
        Client.Send(topicMessage);
    }

    public static void GenerateImagesForViewerW80(
    [ServiceBusTrigger("resize-images-topic", "SizeW80")] BlobInformation blobInfo,
    [Blob("unprocessed-pdf-storage-container/{BlobNameWithoutExtention}-pdf.jpg", FileAccess.Read)] Stream input,
    [Blob("processed-image-storage-container/{BlobNameWithoutExtention}-h0-w80.jpg")] CloudBlockBlob outputBlob_0_80)
    {
      // It never comes here
      //Do something here
    }
}

将数据(BlobInformation 对象)上传到我的队列后,触发第一个方法(GenerateImagesForViewer)没有问题。但是当我尝试向主题发送数据(BlobInformation 对象)时,它永远不会触发任何订阅者(GenerateImagesForViewerW80)。是代码有问题,还是 Azure 中需要配置?

【问题讨论】:

    标签: c# azure servicebus azure-servicebus-queues webjob


    【解决方案1】:

    在 Program.cs 中,config.UseServiceBus(); 是使用 ServiceBus 触发器所必需的。如果Functions 中存在其他触发器或绑定,我们不会看到警告,例如您的情况。

    查看下面的代码示例并查看official guidance了解更多详情。

            var config = new JobHostConfiguration();
    
            if (config.IsDevelopment)
            {
                config.UseDevelopmentSettings();
            }
            config.UseServiceBus();
            var host = new JobHost(config);
            host.RunAndBlock();
    

    此外,我在您的输入和输出 blob 路径中看到一些可疑的空白。如果和你原来的代码一样,直接去掉,否则触发器不会正确执行blob操作相关的代码。

    【讨论】:

    • 我修正了参数中的可疑空白,这是一个错字。我在Program.cs 中添加了config.UseServiceBus();,但到目前为止没有任何改变。还有其他建议吗?
    • @IvanD 你在host.RunAndBlock();之前加config.UseServiceBus();吗?
    • 这就是我在Program.cs 中的代码的样子:public static void Main() { JobHostConfiguration config = new JobHostConfiguration(); config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(15); config.UseServiceBus(); var host = new JobHost(); host.RunAndBlock(); }
    • @IvanD Gotcha,当我们初始化 JobHost 时,配置应该作为构造函数参数传递。我的错误,应该早点发布完整的示例。
    • 这就是问题所在。非常感谢您的帮助!太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2015-04-02
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多