我們目前正在利用Azure服務總線處理來自應用程序的各種消息。如何積極處理Azure服務總線隊列消息
我想知道什麼是實時處理這些消息的最佳方式?
有沒有辦法在郵件放入隊列時自動執行腳本?
我只是認爲必須有一個更好的方法,而不是有一個單獨的應用程序每分鐘/ 30秒/等檢查隊列。
謝謝你們
我們目前正在利用Azure服務總線處理來自應用程序的各種消息。如何積極處理Azure服務總線隊列消息
我想知道什麼是實時處理這些消息的最佳方式?
有沒有辦法在郵件放入隊列時自動執行腳本?
我只是認爲必須有一個更好的方法,而不是有一個單獨的應用程序每分鐘/ 30秒/等檢查隊列。
謝謝你們
你並不需要檢查基於定時器不斷總線。
服務總線主題和訂閱支持發佈/訂閱消息傳遞通信模型。
當消息發送到某個主題時,它將被提供給每個訂閱以獨立處理/處理。
這裏是如何從一個主題接收消息的C#示例:
string connectionString =
CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");
SubscriptionClient Client =
SubscriptionClient.CreateFromConnectionString
(connectionString, "TestTopic", "HighMessages");
// Configure the callback options.
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false;
options.AutoRenewTimeout = TimeSpan.FromMinutes(1);
Client.OnMessage((message) =>
{
try
{
// Process message from subscription.
Console.WriteLine("\n**High Messages**");
Console.WriteLine("Body: " + message.GetBody<string>());
Console.WriteLine("MessageID: " + message.MessageId);
Console.WriteLine("Message Number: " +
message.Properties["MessageNumber"]);
// Remove message from subscription.
message.Complete();
}
catch (Exception)
{
// Indicates a problem, unlock message in subscription.
message.Abandon();
}
}, options);
下面是有關出版商的用戶模型的詳細信息:
當它歸結到基礎結構代碼,我寧願不寫任何代碼。畢竟,你想看到的最後一件事是基礎結構代碼中的一個錯誤,導致數據/消息丟失。
使用裸露Azure服務總線的替代方法是使用庫來爲您抽象出所有代碼。最終,你會聲明你的消息 - 你的事件和命令 - 並且你有處理程序會在有消息時被解僱。所有的消息抽取,隊列創建,重試,錯誤處理和審計以及僅僅是冰山一角的交易都伴隨着這樣的框架。
至於要使用哪個框架,有Nimbus和NServiceBus以及其他可能的框架。 NServiceBus是extensive documentation,devops和debugging and visualization實用程序和其他付費支持應用程序的商業產品。這裏是你如何與Azure的ServiceBus得到NServiceBus端點運行起來:
var endpointConfiguration = new EndpointConfiguration("Endpoint1");
endpointConfiguration.SendFailedMessagesTo("error");
var transport = endpointConfiguration.UseTransport<AzureServiceBusTransport>();
var connectionString = Environment.GetEnvironmentVariable("AzureServiceBus.ConnectionString");
transport.ConnectionString(connectionString);
transport.UseTopology<ForwardingTopology>();
var endpointInstance = await Endpoint.Start(endpointConfiguration)
.ConfigureAwait(false);
var message = new Message1
{
Property = "Hello from Endpoint1"
};
await endpointInstance.Send(message).ConfigureAwait(false);
,並在接收方一側,所有你需要的是有一個處理類:
public class MyMessageHandler : IHandleMessages<Message1>
{
public Task Handle(Message2 message, IMessageHandlerContext context)
{
//Do your task
Console.WriteLine(message.Property);
return Task.CompletedTask;
}
}
附:我爲NServiceBus的製造商特定軟件公司工作,但我使用了兩種推薦的框架。你需要決定哪一個適合你。
什麼處理/處理消息?這段代碼在哪裏可以處理即時發送給主題的消息? ...我目前有一個單獨的應用程序,它使用與上面類似的代碼,但它每分鐘都在觸發,我不確定在收到消息時我會在何處/如何將代碼瞬間觸發。它是一個Azure Webjob /等? – Nefariis
此方法處理/處理消息:客戶端。OnMessage((message)=> { – Aram
@Nefariis大約一分鐘是AutoRenewTimeout屬性的默認值,您可以更改AutoComplete設置爲false以手動控制何時調用接收到的消息的完成AutoRenewTimeout爲設置爲1分鐘,這會導致客戶端等待最多一分鐘,然後終止自動續訂功能,並且客戶端將重新進行呼叫以檢查消息。 – Aram