我正在玩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”设置,然后就可以了。由于某种原因,它无法获取我自己的连接字符串。
答案 0 :(得分:5)
您应该使用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中找到更多信息。
答案 1 :(得分: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;
}