昨天当我们尝试更换我们的分段< - >生产角色时,我们遇到了可怕的问题/体验。Windows Azure升级<-->生产导致表存储中的冲突和错误
这里是我们的设置:
我们有一个workerrole从队列中拿起消息。这些消息在角色上处理。 (表存储插入,数据库选择等)。这可能需要每队列消息1-3秒,具体取决于他需要创建多少表格存储帖子。一切完成后,他将删除该消息。
问题交换时:
当我们的分期项目上线我们的生产workerrole开始示数。
当角色想要处理队列消息时,它给了'EntityAlreadyExists'错误的持续流。由于这些错误,队列消息未被删除。这导致队列消息被放回到队列中并返回到处理等。......
当查看这些队列消息并分析将发生什么事情时,我们看到它们实际已处理但未被删除。
删除这些错误消息时,问题还没有结束。新的队列消息没有得到处理,而这些消息尚未处理,也没有添加表存储记录,这听起来很奇怪。
当删除分段和生产并再次发布到生产时,一切都开始正常工作。
可能的问题?
我们有litle 2不知道实际发生了什么事。
- 也许这两个角色拿起相同的消息,一个发布了帖子,一个发生了错误?
- ... ???
可能的解决方案?
我们对如何解决这个“问题”有一些想法。
- 让毒讯息在系统中失效?当出队计数超过X时,我们应该删除该队列消息或将其放入单独的“poisonqueue”中。
- 捕获EntityAlreadyExists错误,只删除该队列消息或将其放入单独的队列中。
- ... ????
的多重角色
我想我们都会有同样的问题搭建多个角色时?
非常感谢。
编辑24/02/2012 - 额外的信息
- 我们实际使用的的GetMessage()
- 在队列中的每个项目都是独特的,将产生表存储唯一的消息。关于该过程的更多信息:用户发布内容并且必须分发给某些其他用户。从该用户生成的消息将具有唯一的Id(guid)。该消息将被发布到队列中并由工作者角色提取。该消息分布在多个其他表(分区键 - > UserId,rowkey - >某些时间戳记&中唯一的消息ID。因此几乎没有机会在相同的消息发布在正常情况下
- 不可见时间出可能是一个合乎逻辑的解释,因为有些消息可能被分配到喜欢10-20表。这意味着10-20插入不批选项。你可以设置或扩大这一可见时间出来?
- 不删除队列消息,因为有异常可能也是一个解释,因为我们没有实现任何有毒消息故障转移YET;)。
最新的队列实现允许您更改可见性超时。 http://msdn.microsoft.com/en-us/library/windowsazure/hh452234.aspx – hocho 2012-02-24 16:55:52