当前位置: 首页 > 知识库问答 >
问题:

在Azure函数中从Azure服务总线接收JSON(Cosmos DB文档)作为输入

鲜于允晨
2023-03-14

到目前为止,我正在与以下工作:

具有单路输出的f1

#r "Microsoft.Azure.Documents.Client"
#r "Microsoft.ServiceBus"
using Microsoft.ServiceBus.Messaging;
using Microsoft.Azure.Documents;
using System.Collections.Generic;
using System;

public static void Run(IReadOnlyList<Document> inputFeed, TraceWriter log,
    out Document outputSbQueue)
{
  //f1 with a single output to a Queue
}

具有ICollector输出的f1

#r "Microsoft.Azure.Documents.Client"
#r "Microsoft.ServiceBus"
using Microsoft.ServiceBus.Messaging;
using Microsoft.Azure.Documents;
using System.Collections.Generic;
using System;

public static void Run(IReadOnlyList<Document> inputFeed, TraceWriter log,
    ICollector<Document> outputSbQueue)
{
  //f1 with an ICollector output
}    
#r "Microsoft.Azure.Documents.Client"
#r "Newtonsoft.Json"
using Microsoft.Azure.Documents;
using System.Collections.Generic;
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
public static void Run(Document myQueueItem, TraceWriter log)
{
    //f2 with a working single input -- myQueueItem is an SB trigger
}
#r "Microsoft.Azure.Documents.Client"
#r "Newtonsoft.Json"
using Microsoft.Azure.Documents;
using System.Collections.Generic;
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;

public static void Run(IReadOnlyList<Document> myQueueItem, TraceWriter log)
{
    //f2 with an input of more than one document
}

引发此异常:

2018-05-15T20:48:21.535[错误]执行函数Functions.ServiceBusQueuetRiggerCSharp1时出现异常。Microsoft.Azure.WebJobs.Host:异常绑定参数“My QueueItem”。Microsoft.azure.WebJobs.ServiceBus:将参数绑定到复杂对象(如'ICollector1')使用JSON.NET序列化。1.将参数类型绑定为'string'而不是'icollector1'以获取原始值并避免JSON反序列化,或者2。将队列负载更改为有效的JSON。JSON解析器失败:无法将当前JSON数组(例如[1,2,3])反序列化为类型“Microsoft.Azure.WebJobs.ICollector”1[Microsoft.Azure.Documents.Document]“,因为该类型需要一个JSON对象(例如{”name“:”value“})才能正确反序列化.要修复此错误,可以将JSON更改为JSON对象(例如{“name”:“value”}),或者将反序列化类型更改为数组或实现集合接口(例如ICollection、IList)的类型,该集合接口可以从JSON数组反序列化。还可以将JsonArrayAttribute添加到类型中,以强制它从JSON数组反序列化。路径''',行1,位置1。

我是一个处理JSON、序列化和反序列化的完全新手。我只想解析它,从中读取内容,并准备好发送到下游的SQL语句。

共有1个答案

经国安
2023-03-14

目前,服务总线触发器不支持批处理(多项作为输入)。请参见服务总线批处理触发github问题。

如果我正确理解了您的场景,您不一定要在f2函数中接受一个批处理,也不需要“遍历消息的整个队列”。

迭代将由函数处理。您的f2函数将被调用的次数与f1发送到服务总线队列的消息的次数一样多。如果您在获取文档时逐个“清理”这些文档,则最终将清理所有文档。

 类似资料:
  • 调试此代码时,应用程序停止。未显示任何错误消息或异常。 项目X: 下面我将通过REST API发布JSON对象。 项目Y: 有办法找到尸体吗?

  • 参考https://github.com/Azure/azure-service-bus/tree/master/samples/dotnet/gettingstart/microsoft.Azure.servicebus/basicsendreceiveusingtopicsubscriptionclient,我了解Azure服务总线主题的一般工作方式,我的问题更多地是关于它实际上是如何工作的。

  • 我需要将一条消息从运行在SQL Server2014下的SSIS包放入Azure ServiceBus队列中。正如本文所建议的:从ssis连接到azure服务总线队列,我编写了一个引用“azure SDK2.9”的脚本任务。这种方法适用于Azure存储帐户处理Blob(引用Microsoft.WindowsAzure.Storage程序集),但不适用于Azure存储总线(引用Microsoft.S

  • 我正在尝试使用服务总线绑定输出为JavaScript Azure函数中的服务总线消息设置元数据。不幸的是,绑定似乎只支持主体。 查看文档,我发现您可以通过上下文访问service bus触发器中的此信息。bindingData,但我没有看到服务总线输出的任何对应接口。

  • 我有一个超时选项,只想在超时前接收消息。 如果您能解释下面的代码是如何工作的,以及我如何修改下面的代码以在特定的时间框架内接收消息,并且一旦我的超时已经到达就停止接收,这将是很有帮助的。

  • 在.NET core 2.0中使用创建时,我遇到了一个问题。 在体系结构中,当在用于创建用户的队列中创建新消息时,服务必须接收该消息并根据其中的信息在数据库中创建用户。 在Visual Studio2017中,我在下创建了一个新项目。 这种的正确实现是什么?在GitHub上有什么例子吗?提前道谢。