azure - 有两种方法可以从 azure 函数 HTTP 触发器读取所有服务总线消息
问题描述
有两种方法可以read all the messages
从service bus topic
.
which one is recommended for azure functions
选项1 -
var messageReceiver = new MessageReceiver(SBConnString, QueueName, ReceiveMode.PeekLock);
Message message = await messageReceiver.ReceiveAsync();
选项 2 -
static async Task ReceiveOrProcessMessagesAsync(Message message, CancellationToken token)
{
// Process the message
Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");
// Complete the message so that it is not received again.
// This can be done only if the queueClient is created in ReceiveMode.PeekLock mode (which is default).
await queueClient.CompleteAsync(message.SystemProperties.LockToken);
// Note: Use the cancellationToken passed as necessary to determine if the queueClient has already been closed.
// If queueClient has already been Closed, you may chose to not call CompleteAsync() or AbandonAsync() etc. calls
// to avoid unnecessary exceptions.
}
azure 函数 http 触发器应该使用什么?
解决方案
参考 George Chen 的代码,您需要进行一些更改才能阅读主题中的所有消息。
public static class Function1
{
[FunctionName("Function1")]
public static async void Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string serviceBusConnectionString = Environment.GetEnvironmentVariable("servicebuscon");
var messageReceiver = new MessageReceiver(serviceBusConnectionString, "myqueue", ReceiveMode.PeekLock, null, 500);
do
{
var tempMessages = await messageReceiver.ReceiveAsync(500, TimeSpan.FromSeconds(1));
foreach (Message m1 in tempMessages)
{
log.LogInformation($"C# HTTP trigger function processed message: {Encoding.UTF8.GetString(m1.Body)}");
}
}while(tempMessages!=null);
}
}
上面的代码已经修改了一个 do-while 循环,它接收来自 Topic 的所有消息,而不是队列中的第一条消息。
推荐阅读
- spring - Grails - 从 spring bean 自定义数据源配置
- python - 刽子手游戏 - 如果输入的字母序列混乱,则无法将输入字母与单词匹配
- reactjs - 将常量值设置为可变字符串的初始状态
- c# - 如何使用 System.Text.Json API 将流反序列化为对象
- python - 如何提高准确率和召回率
- python-3.x - 如何在 IQR 中将 pandas 中的值分别设置为列
- c++ - 指向这个定义的内部类的静态指针,用于 googletest 的模拟
- automation - 如果任务失败,则在节点上运行任务并从不同节点重新启动守护程序 Ansible
- kotlin - 如何在挂起函数中打印当前堆栈跟踪?
- python - pytest/sqlalchemy 对象未绑定到会话错误