我是Azure服务总线的新手,我应该将消息推送到队列中,然后有一个单独的计划任务,该任务将读取该队列中的所有活动消息,并将它们批量导入到sql我以前尝试过这个代码,当我调用时它正在工作它在发送消息后立即工作,但现在它在单独的计划任务中不工作。任何帮助为什么或什么我可以用来批量阅读信息或这是不可能的
queueClient = new QueueClient(conn, queuename, ReceiveMode.ReceiveAndDelete);
var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
{
MaxConcurrentCalls = 1,
AutoComplete = false
};
queueClient.RegisterMessageHandler(ReceiveMessagesAsync, messageHandlerOptions);
public async Task ReceiveMessagesAsync(Message message, CancellationToken token)
{
messages.Add(message.Body.ToString());
Console.WriteLine($"Received message: {Encoding.UTF8.GetString(message.Body)}");
await queueClient.CompleteAsync(message.SystemProperties.LockToken);
}
public Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
{
Console.WriteLine(exceptionReceivedEventArgs.Exception);
return Task.CompletedTask;
}
这将是很好的知道你是使用什么库来做这件事,但我建议使用https://www.nuget.org/packages/Azure.Messaging.ServiceBus/nuget包,有了它,你可以:
class Program
{
static async Task Main(string[] args)
{
string queueName = "myqueue";
var client = new ServiceBusClient("myconn");
// create a processor that we can use to process the messages
var processor = client.CreateProcessor(queueName, new ServiceBusProcessorOptions());
// add handler to process messages
processor.ProcessMessageAsync += MessageHandler;
// add handler to process any errors
processor.ProcessErrorAsync += ErrorHandler;
await processor.StartProcessingAsync();
// Process messages for 5 minutes
await Task.Delay(TimeSpan.FromMinutes(5));
// stop processing
Console.WriteLine("Stopping the receiver...");
await processor.StopProcessingAsync();
Console.WriteLine("Stopped receiving messages");
}
private static Task ErrorHandler(ProcessErrorEventArgs arg)
{
// Here you can catch errors;
return Task.CompletedTask;
}
static async Task MessageHandler(ProcessMessageEventArgs args)
{
// Do something with the message .e.g deserialize it and insert to SQL
try
{
BinaryData content = args.Message.Body;
// Here you can use :
string contentStr = content.ToString(); // This would be your data
}
catch (Exception e)
{
// If something goes wrong you should abandon the message
await args.AbandonMessageAsync(args.Message);
}
await args.CompleteMessageAsync(args.Message);
}
}
这将处理所有消息,直到时间结束。这将是一个很好的计划任务。如果您想在处理了特定数量的消息后停止,您可以执行异步循环并检查是否已达到该数量。
我想从azure服务总线(队列)读取所有消息。 我已经按照下面的指示链接https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-php-how-to-use-queues 目前它只能获取一条消息。。 我想从服务总线(队列)获取所有消息。 提前谢谢。。
我正在使用Azure服务总线队列。但是我不能使用“获取所有队列消息(peek Lock):微软内置于api”从队列中获取所有消息。 有没有办法获取所有队列消息? {"$连接":{"值":{"servicebus_1":{"连接ID":"/订阅/c776fex3-6aec-4722-b099-b054c267b240/资源组/Plugin-Resources/提供者/Microsoft.网络/连接/
我有一个应用程序,在这个应用程序中,我可以在进程的一部分中以JSON格式将消息写入Azure服务总线队列。我有一个下游进程,我想将该消息从队列中弹出,将json转换为一个对象,然后处理该对象。 我没有问题将消息推送到队列上,但我还没有找到任何将消息从队列中逐一或循环弹出的示例。我在微软或Github上看到的每一个例子都是一个控制台应用程序(在网络应用程序中毫无用处),它设置了某种侦听器,可以抓取队
我有一个Azure服务总线队列,死信子队列中有236条消息。我知道这一点,因为Azure门户和服务总线资源管理器会向我显示该数字。 我在LINQPad中写了以下内容来检索所有236条消息并检查它们。然而,它只返回236条消息中的136条。 我正在使用v5。微软的1.0。蔚蓝色的获取服务包。 有没有想过为什么我没有收到全部236条信息?
我有一个windows服务,它侦听Azure服务总线队列消息,以便从我的WebApi应用程序分发处理。此外,我还需要处理重复性任务(每晚/每周),我认为最好使用相同的系统来处理这些任务。 例如,假设我有一个“CleanupDb”队列,每天午夜删除过时的DB节点: 理论上这应该行得通,但我觉得我错过了一个更明显的处理方法。有没有更好的办法?
我们目前正在利用Azure服务总线来处理来自应用程序的各种消息。 我想知道实时处理这些消息的最佳方式是什么? 有没有一种方法可以在消息放入队列时自动执行脚本? 我只是在想,一定有比让一个单独的应用程序每分钟/30秒检查一次队列更好的方法。 谢谢各位