逻辑应用程序 - 如何从队列中读取批处理消息
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"中找不到,请按表达式输入。
之后,我们将只收到一封来自逻辑应用的电子邮件。
如何从队列中读取一批消息然后将所有 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" } ]
)。
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"中找不到,请按表达式输入。
之后,我们将只收到一封来自逻辑应用的电子邮件。