逻辑应用程序 - 如何从队列中读取批处理消息

Logic App- How to read Batch messages from a queue

如何从队列中读取一批消息然后将所有 json 添加到一个

这是我的

为了简单起见,如果有 5 条消息,我想触发逻辑应用程序从队列中读取,然后我需要将 JSON 添加到一个队列中......例如,见下文(不确定这是否正确命令) 我发送到队列的 JSON 是:

[ { "fname":"1", "lname":"1" } ]
[ { "fname":"2", "lname":"2" } ]
[ { "fname":"3", "lname":"3" } ]
[ { "fname":"4", "lname":"4" } ]
[ { "fname":"5", "lname":"5" } ]

然后预期 JSON 输出

[
  {
    "fname": "1",
    "lname": "1"
  },
  {
    "fname": "2",
    "lname": "2"
  },
  {
    "fname": "3",
    "lname": "3"
  },
  {
    "fname": "4",
    "lname": "4"
  },
  {
    "fname": "5",
    "lname": "5"
  }
]

************************************************ **更新*********************************************** ********

现在我只需要发送一次电子邮件..它被发送多次..例如: 而不是收到一封电子邮件 [ { "fname":"1", "lname":"1" },{ "fname":"2", "lname":"2" }

我收到一封电子邮件: [ { "fname":"1", "lname":"1" } ]

然后是另一封电子邮件 [ { "fname":"1", "lname":"1" },{ "fname":"2", "lname":"2" } ]

基本上我需要得到 JSON 的最终结果,这样我可以稍后将它传递给数据库

我不知道你为什么要在逻辑应用中使用 "Get message from a queue" 操作。根据我的理解,您创建了一个批量发送器来发送这五条消息,然后触发了批量接收器。并且您想将五个 json 消息转换为您期望的格式。所以我在下面提供我的测试步骤供您参考。 (在我的逻辑应用程序中,我将 "Message Count" 设置为“3”以便于测试)

1. 我创建了一个批处理接收器触发器,下面是批处理接收器下的所有操作。

2. 那么 "For each" 循环的细节如下图所示:

上面截图中的表达式为:

union(variables('result'), items('For_each')['content'])

3. 您最好通过单击“设置”来修改"For each"循环的设置并启用“并发控制”并将“并行度”更改为“1”。

4. 然后我创建另一个逻辑应用程序作为批处理发送者。

运行这个逻辑app(batch sender)三次,一条一条发送json条消息。

5. 现在回到第一个逻辑应用程序(batch receiver),检查 [=89= 的第三个循环中的 result 变量] 循环(在逻辑应用 "runs history" 中)。我们可以看到如下所示的结果:

更新:

将第 4 步(批量发送逻辑应用程序)更改如下:

4.1 初始化一个名为 "message" 的变量并使用 "Get messages from a queue (peek-lock)" 操作来获取队列中的消息。

4.2使用"For each"循环队列中的"Body"并使用变量"message"存储"Content" 每个循环中的队列。然后将变量"message"放入batch sender。(请注意,我们不能直接将"Content"放入batch sender,因为"Content"就像一个二进制字符串,我们需要使用存储一个变量,然后将其放入批量发送器,则它将是 json [ { "fname":"1", "lname":"1" } ])。 不要忘记更改此 "For each" 操作的设置,否则结果将不正确。

2.1 在step2中,请将表达式从

union(variables('result'), items('For_each')['content'])

union(variables('result'), json(items('For_each')['content']))

更新2:

在batch receiver logic app中,我初始化了一个名为"result"的变量,它用于存储"For each"中每个循环的最新json值。因此,只需将 "Send an email(v2)" 移到 "For each" 之外,然后发送带有变量 "result" 作为 "Body" 的电子邮件。请参考下面我的逻辑应用程序:

将"Send an email(v2)" 动作移到"For each" 循环之外,并尝试将变量"result" 放入电子邮件的"Body" 中。但在"Dynamic content"中找不到,请按表达式输入。

之后,我们将只收到一封来自逻辑应用的电子邮件。