传入队列消息的永久侦听器
Posted
技术标签:
【中文标题】传入队列消息的永久侦听器【英文标题】:Permanent listener for incoming Queue Messages 【发布时间】:2021-03-16 11:02:56 【问题描述】:我想做以下事情:
创建一个由函数启动一次的 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);
有没有人建议我如何解决这个问题?
【问题讨论】:
【参考方案1】:在我看来,我的基本问题是找到一种方法等到 可以执行事件处理程序。我想永久地这样做。所以 应该总是可以执行事件处理程序。 目前GetPayloadAsync入口函数终止太快。
可以使用azure function的service bus trigger,这是一个现成的工具,可以用来处理新传入的消息到队列。并且它不会终止(这符合您对“永久”的要求)。你可以按照这个来创建一个 azure 函数:
https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-your-first-function-visual-studio
https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-trigger?tabs=csharp
【讨论】:
首先感谢您的回答。我需要一个通过 DLL 文件的解决方案。此 DLL 文件将集成到我们的 ERP 系统 Dynamics NAV 中。在 Dynamics NAV 中,定义了应该执行的事件处理程序。因此 DLL 接收到一个服务总线消息并触发一个事件。以上是关于传入队列消息的永久侦听器的主要内容,如果未能解决你的问题,请参考以下文章