只是一个关于Azure应用程序的快速问题.如果我有许多需要通信的Web和Worker角色,文档说要使用Azure队列服务.
但是,我刚刚读到新的.NET Service Bus现在也提供了队列.这些看起来更强大,因为它们似乎提供了更加详细的API.虽然.NSB看起来更有趣,但它有几个问题让我在分布式应用程序中使用它时会很谨慎.(例如,Queue Expiration ...如果我不能保证队列将按时更新,我可能会失去它!).
有没有人有任何经验使用这两种技术中的任何一种,并且可以提供何时选择其中一种的建议.
我怀疑虽然服务总线看起来更强大,但我的用例实际上只是让Web/Worker角色能够相互通信,Azure Queue Service就是我所追求的.但是我真的在寻找确认之前,然后自己进入角落:-)
提前致谢.
在休息时间读了两个系统.它看起来像.NET服务总线更专门用于集成系统,而不是提供通用的可靠消息系统.Azure队列是分布式的,因此可靠且可扩展,其中.NSB队列不是,因此更适合Azure本身托管的代码.
谢谢你的回复.
我正在尝试找到一种将对象传递给Azure队列的方法.我找不到办法做到这一点.
正如我所见,我可以传递字符串或字节数组,这对于传递对象来说并不是很舒服.
无论如何都要将自定义对象传递给队列?
谢谢!
public static void ProcessMessage([QueueTrigger("queue")] string message, TextWriter log)
{
//processing message
}
Run Code Online (Sandbox Code Playgroud)
这个方法究竟是如何触发的.
WebJob主机是否只是对存储队列进行轮询.或存储队列引发新的消息事件,该主机订阅?
当Webjobs通过QueueTrigger从Azure存储上的队列中获取消息时,它会租用该消息(使其不可见).如果(webjob的)触发功能需要很长时间来处理消息,这个租约是否会自动扩展?或者我应该在功能中处理?
在此链接Windows Azure队列:改进租约,进度跟踪和未来工作的调度,作者声明" 消息的租约可以由执行原始出列的工作人员扩展,以便它可以继续处理消息 "
注意:我尝试了一个等待20分钟的webjob(带有QueueTrigger).
//Write Log
Thread.Sleep(1200000);
//Write Log
Run Code Online (Sandbox Code Playgroud)
它成功完成.在此期间,没有其他webjob实例尝试尝试相同的队列项(它没有变得可见).因此,似乎存在租赁的自动更新机制.无论如何,我正在等待微软员工的回答或官方链接(msdn,azure,...).
我正在使用Azure队列,并从队列中读取几个不同的进程.
我的系统构建方式假定每条消息只读一次.
这篇Microsoft文章声称Azure队列至少有一次传递保证,这可能意味着两个进程可以从队列中读取相同的消息.
此StackOverflow线程声称,如果我使用GetMessage,则该消息对于隐身超时的所有其他进程变得不可见.
假设我使用GetMessage()并且在DeleteMessage之前从不超过消息不可见时间,我可以假设我只会获得每条消息一次吗?
我正在制定一个向Azure存储队列发布消息的方案.出于测试目的,我开发了一个控制台应用程序,我收到消息,我可以通过尝试计数更新它,当逻辑完成后,我删除了消息.
现在我正在尝试将我的代码移植到Azure功能.有一点似乎是非常不同的是,当调用Azure函数时,消息将从队列中删除.
我发现很难找到关于这个特定主题的任何文档,我觉得我错过了关于将这两者结合起来的概念.
我的问题:
如何向Azure队列存储添加消息,该消息将在明天(24小时后)显示在队列中?
我在Azure存储中有一个队列,例如'messages'.每隔1小时,一些服务会向此队列推送一些应该更新数据的消息.但是,在某些情况下,我也从另一个地方推送到此队列消息,我希望此消息立即进行,我无法为此消息设置优先级.
这个问题的最佳解决方案是什么?我可以使用两个不同的队列("消息"和"消息优先级"),还是一个糟糕的方法?
我正在使用Azure Webjobs处理队列中的消息.
我看到Webjobs SDK在10分钟后再次处理任何失败的消息,如果失败5次,它会将其移动到毒性队列(1).
此外,我可以看到队列中消息的nextVisibleTime,即插入时间(2)后10分钟.
我想使用AzureSDK错误处理消息,但我不能等待10分钟再次处理消息.
有什么方法可以将nextVisibleTime设置为几秒钟吗?
如果方法在完成之前失败,则不删除队列消息; 在10分钟的租约到期后,该消息将被释放以便再次接收并处理.
public static void WriteLog([QueueTrigger("logqueue")] string logMessage,
DateTimeOffset expirationTime,
DateTimeOffset insertionTime,
DateTimeOffset nextVisibleTime,
Run Code Online (Sandbox Code Playgroud)
注意:StackOverflow中有类似的问题,但没有答案: