在Azure辅助角色中使用QueueClient.OnMessage在Azure辅助角色中使用QueueClient.OnMessage我有一个Azure辅助角色,它检查4个服务总线队列。目前,我只是循环使用手动检查队列的方法。while(true){//循环遍历我的队列以检查消息}AzureSDK2.0能够侦听消息而不是轮询它们。但是我见过的每个示例都将Console.ReadKey()用于控制台应用程序。有没有办法让工作者角色坐下来等待消息?我试过:publicoverridevoidRun(){_queueProcessors.ForEach(x=>x.OnMessage(Process);}其中_queueProcessors是QueueClients的列表,Process是处理消息的私有方法。但是,工作者角色注册他们然后重启。所以任何人都知道如何让团队客户端坐下等候消息?使用Microsoft.ServiceBus.Messaging;使用Microsoft.WindowsAzure.ServiceRuntime;使用系统诊断;使用System.Net;使用系统线程;namespaceWorkerRoleWithSBQueue1{publicclassWorkerRole:RoleEntryPoint{//你的队列名称conststringQueueName="demoapp";ManualResetEventCompletedEvent=newManualResetEvent(false);//QueueClient是线程安全的。建议您缓存//而不是在每次请求时都重新创建它QueueClientClient;publicoverridevoidRun(){OnMessageOptionsoptions=newOnMessageOptions();options.AutoComplete=true;//指示消息泵是否应在回调完成处理后对消息调用完成。options.MaxConcurrentCalls=1;//指示泵应启动的回调的最大并发调用数options.ExceptionReceived+=LogErrors;//允许用户收到通知d消息泵遇到的任何错误Trace.WriteLine("Startingprocessingofmessages");//开始接收消息Client.OnMessage((receivedMessage)=>//启动消息泵并为收到的每条消息调用回调,在客户端上调用关闭将停止泵。{try{//处理消息Trace.WriteLine("ProcessingServiceBusmessage:"+receivedMessage.SequenceNumber.ToString());}catch{//在此处处理任何消息处理特定异常}},options);CompletedEvent.WaitOne();}privatevoidLogErrors(objectsender,ExceptionReceivedEventArgse){if(e.Exception!=null){Trace.WriteLine("Error:"+e.Exception.Message);}}publicoverrideboolOnStart(){//设置最大并发连接数ServicePointManager.DefaultConnectionLimit=12;//如果队列不存在则创建队列Trace.WriteLine("CreatingQueue");stringconnectionString="***提供你的connectionstringhere***";varnamespaceManager=NamespaceManager.CreateFromConnectionString(connectionString);if(!namespaceManager.QueueExists(QueueName)){namespaceManager.CreateQueue(QueueName);}//初始化与服务总线队列的连接Client=QueueClient。CreateFromConnectionString(connectionString,QueueName);Trace.WriteLine("Sendingmessages...");//populatesomemessagesfor(intctr=0;ctr}以上是C#学习教程:在azureworker中使用QueueClient.OnMessage作用分享所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注---本文收集自网络,不代表立场。如有涉及侵权,请点击维权联系管理员删除,如需转载请注明出处:
