我想做以下事情:
创建一个DLL,该DLL由函数启动一次,然后永久侦听新传入的服务总线消息。
在我看来,我的基本问题是找到一种方法,等待事件处理程序能够执行。我想永久这样做。因此,应该始终可以执行事件处理程序。当前GetPayloadAsync入口函数终止得太快。
在.NET中,代码如下:
函数GetPayloadAsync
public static async Task GetPayloadAsyc()
{
_tokenSource = new CancellationTokenSource();
var token = _tokenSource.Token;
await ReceiveMessagesAsync(token));
}
ReceiveMessagesAsync函数如下所示,并注册事件处理程序:
static async Task ReceiveMessagesAsync(CancellationToken token)
{
ServiceBusClient client = new ServiceBusClient(AZURE_SERVICE_BUS_CONNECTIONSTRING, new ServiceBusClientOptions
{
TransportType = ServiceBusTransportType.AmqpWebSockets
});
ServiceBusSessionProcessor processor = client.CreateSessionProcessor(QUEUE_NAME, new ServiceBusSessionProcessorOptions
{
MaxConcurrentSessions = 1,
AutoCompleteMessages = false
});
// add handler to process messages
//processor.
processor.ProcessMessageAsync += MessageHandler;
// add handler to process any errors
processor.ProcessErrorAsync += ErrorHandler;
// start processing
await processor.StartProcessingAsync(token);
}
有人建议我怎样解决这个问题吗?
在我看来,我的基本问题是找到一种方法,直到可以执行事件处理程序。我想永久这样做。所以应该始终可以执行事件处理程序。当前GetPayloadAsync入口函数终止得太快。
您可以使用azure函数的服务总线触发器,这是一个现成的工具,可以用来处理队列中新的传入消息。它不会终止(这符合您的"永久"要求(。你可以按照这个创建一个azure函数:
https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-your-first-function-visual-studio
https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-trigger?tabs=csharp