在返回ServiceBus消息的Azure函数中,如何有条件地返回消息?

我有一个azure函数,它返回一条服务总线消息。但是,我想有条件地返回一条服务总线消息,而不是每次都被迫返回该消息。

这是一个例子

[FunctionName("ServiceBusOutput")]
[return: ServiceBus("myqueue",Connection = "ServiceBusConnection")]
public static string ServiceBusOutput([HttpTrigger] dynamic input,ILogger log)
{
    log.LogInformation($"C# function processed: {input.Text}");

    // check condition here,abort return completely

    // Otherwise,return

    return input.Text;
}

换句话说,当某些条件适用于功能代码块时,我想在服务总线上返回一条消息。这可能吗?

一个行不通的想法是引发异常。但是,这只会导致将消息放入DL队列中。我想完全中止在服务总线上返回消息的操作,并避免使用DL。

另一个行不通的想法是简单地执行

return;

但这会导致编译时错误,这是预期的 “必须将类型转换为'MyReturnType1'的对象”

我可以想到一个我不喜欢的hack,它返回null,然后在链中稍后处理null。但这对我来说有点脏。

chahu2008 回答:在返回ServiceBus消息的Azure函数中,如何有条件地返回消息?

您可以将ServiceBus绑定为MessageSender类型,然后使用SendAsync()方法发送消息。

下面是我的测试代码,如果请求名称等于“ george”,它将把名称发送到消息队列。

public static class Function1
    {
        [FunctionName("Function1")]
        public static async System.Threading.Tasks.Task RunAsync(
            [HttpTrigger(AuthorizationLevel.Function,"get","post",Route = null)] HttpRequest req,[ServiceBus("myqueue",Connection = "ServiceBusConnection")] MessageSender messagesQueue,ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;
            if (name.Equals("george")) {
                byte[] bytes = Encoding.ASCII.GetBytes(name);
                Message m1 = new Message();
                m1.Body = bytes;
                await messagesQueue.SendAsync(m1);
            }
        }
    }

假设这是您想要的,希望对您有所帮助,如果您还有其他问题,请随时告诉我。

,

可以使用功能内部创建的自定义队列客户端将消息发送到队列,而不必使用Azure Function中可用的输出绑定。

使用绑定无法根据条件发布消息。

本文链接:https://www.f2er.com/3156510.html

大家都在问