我正在使用Azure服务总线在两个.Net核心Web API应用程序之间进行消息传递。 通过使用topicClient,我可以将消息发送到ABS。 但是,在使用订阅客户端接收消息时,我遇到了这个问题。
ProcessMessagesAsync-在我提供“ Console.Read();”之前不会触发方法。。我不能使用此功能,因为我正在使用Web API。
我还能如何触发此ProcessMessagesAsync方法-完美读取我的消息。
谢谢。
public async Task GetMessageFromSubscription()
{
subscriptionClient = new SubscriptionClient(ServiceBusConnectionString, TopicName, SubscriptionName);
RegisterOnMessageHandlerAndReceiveMessages();
// Console.Read(); ------- Without this line
await subscriptionClient.CloseAsync();
}
public void RegisterOnMessageHandlerAndReceiveMessages()
{
var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler);
subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
}
private async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
var messageBody = Encoding.UTF8.GetString(message.Body);
var serviceBusMessage = JsonConvert.DeserializeObject<WorkIntakeItem>(messageBody);
await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
}
答案 0 :(得分:1)
这是一个循环,其运行过程与进程一起运行。进程结束后,处理程序将终止。
如果您有连续的消息流,那么处理程序(即消息泵)是一个合适的选项。如果您只需要接收一条消息并退出,则可以使用消息MessageReceiver.ReceiveAsync
的阻止选项。您可以在关闭时控制该应用。
$pageid = 2551;
$url = 'https://de.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&pageids='.$pageid;
$content = file_get_contents($url);
$content = json_decode($content, TRUE);
$content = $content['query']['pages'][$pageid]['revisions'][0]['*'];
$anfang = 'KURZBESCHREIBUNG=';
$ende = '\\n';
if(preg_match('%'.$anfang.'(.*)'.$ende.'%isU', $content, $match)) { $beschreibung_kurz = trim($match[1]); }
有关更多详细信息,您可以参考此article。