传入队列消息的永久侦听器



我想做以下事情:

创建一个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

最新更新