我们目前正在利用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