首页 文章

如何从Azure功能向Azure Service Bus发送消息?

提问于
浏览
1

我正在玩Azure功能并尝试设置管道和过滤器(模式)的复杂构造 . 我正在使用Azure功能 .

我的出发点是HTTP触发的Azure功能 . 这会从请求正文中收集一些JSON,并将此消息传递给Azure Service Bus .

我必须在这里遗漏一些东西(我之前在使用控制台应用程序的RabbitMQ中完成了这个)但是如何从HTTP触发的Azure功能向服务总线发布消息 .

我找到了几个关于配置我的function.json的引用(无论是什么 - 我在Visual Studio中构建) .

这个输入/输出(触发/绑定)的工作原理是什么 - 我猜这是问题......或者??

我有第一个Azure功能,并从HTTP接收数据 - 到目前为止一切都很好 . 但是如何进行?

更新仍然无法让它工作 . 得到这个代码,它失败了一个http500 . (它还说我需要看到og - 那个日志在哪里?)

public static class EI_WooCommerce_Hub
    {
        [FunctionName("EI_WooCommerce_Hub")]
        [return: ServiceBus("eilogging", Connection = "EIIntegrationServiceBusConnection")]
        public async static Task<string> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "EIWooCommerceHub/name/")]HttpRequestMessage req, TraceWriter log)
        {
            log.Info("Webhook triggered from: ");            
            return "Hello World to queue";
        }       
    }

**更新2 **这似乎是一个配置问题 . 在功能应用程序的应用程序设置中,我不断收到servicebus的授权错误 . 我使用connectionstring添加了默认的“AzureWebJobsServiceBus”设置,然后它工作了 . 由于某种原因,它无法获取我自己的连接字符串 .

2 回答

  • 4

    您应该使用Service Bus输出绑定 . 既然你提到了Visual Studio,我就假设是C# . 最简单的例子如下所示:

    [FunctionName("ServiceBusOutput")]
    [return: ServiceBus("myqueue", Connection = "ServiceBusConnection")]
    public static string ServiceBusOutput([HttpTrigger] dynamic input)
    {
        return input.Text;
    }
    

    然后将名为 ServiceBusConnection 的应用程序设置添加到具有队列 myqueue (或在属性构造函数中重命名)的命名空间中 .

    您可以在Azure Service Bus bindings for Azure Functions - Output中找到更多信息 .

  • 0

    在Visual Studio中构建时,会自动创建 function.json . 您所要做的就是将触发器和输出定义为函数参数的属性(参见此处:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#output

    一个简约的例子:

    [FunctionName("HttpTriggerCSharp")]
    public static async Task<HttpResponseMessage> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequestMessage req,
        [ServiceBus("myqueue")] out string sbMessage,
        TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");
    
        // parse query parameter
        string name = req.GetQueryNameValuePairs()
            .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
            .Value;
    
        sbMessage = name;
    }
    

相关问题