确保 Azure 服务总线永远不会丢失一条消息
Ensuring Azure Service Bus never loses a single message
我有一个系统,在这个系统中,从 Azure 服务总线丢失消息将是一场灾难,也就是说,数据将永远丢失,没有实际的方法可以在不造成重大中断的情况下修复损坏。
在这种情况下我能完全依赖 ASB 吗? (即使它要停机几个小时,它总是会返回失败时保留的相同消息)
如果不是,有什么好的方法可以解决这个消息至关重要且不能丢失的问题?在发布之前简单地将消息保存到数据库以便在发生灾难时可以引用它是否很常见?
使用 Azure 服务总线,您可以做到这一点,并确保 99.99%,
在最坏的情况下,您会在 dead-letter queues 中找到您的消息,但它永远不会被删除。
另一种选择是使用 Azure 存储队列并将 TTL 设置为 -1 它将提供无限的生命周期,
但是因为我有点老派,并且可以肯定的是 101% 我会建议使用 azure table 存储的手动解决方案,
所以由你来决定什么时候 add/delete 或更新一条线路,因为你使用的信息和数据的重要性
Azure 服务总线不会丢失消息。一旦消息被代理成功接收,它就在那里,不会去任何地方。通常出错的地方是消息接收和处理,这是用户自定义代码。这就是服务总线具有 PeekLock
接收模式和基于交付计数的死信的原因之一。
如果你需要强有力的保证,就不要自己重新发明轮子。使用为您完成此操作的消息传递框架,例如 NServiceBus 或 MassTransit。
我有一个系统,在这个系统中,从 Azure 服务总线丢失消息将是一场灾难,也就是说,数据将永远丢失,没有实际的方法可以在不造成重大中断的情况下修复损坏。
在这种情况下我能完全依赖 ASB 吗? (即使它要停机几个小时,它总是会返回失败时保留的相同消息)
如果不是,有什么好的方法可以解决这个消息至关重要且不能丢失的问题?在发布之前简单地将消息保存到数据库以便在发生灾难时可以引用它是否很常见?
使用 Azure 服务总线,您可以做到这一点,并确保 99.99%,
在最坏的情况下,您会在 dead-letter queues 中找到您的消息,但它永远不会被删除。
另一种选择是使用 Azure 存储队列并将 TTL 设置为 -1 它将提供无限的生命周期,
但是因为我有点老派,并且可以肯定的是 101% 我会建议使用 azure table 存储的手动解决方案, 所以由你来决定什么时候 add/delete 或更新一条线路,因为你使用的信息和数据的重要性
Azure 服务总线不会丢失消息。一旦消息被代理成功接收,它就在那里,不会去任何地方。通常出错的地方是消息接收和处理,这是用户自定义代码。这就是服务总线具有 PeekLock
接收模式和基于交付计数的死信的原因之一。
如果你需要强有力的保证,就不要自己重新发明轮子。使用为您完成此操作的消息传递框架,例如 NServiceBus 或 MassTransit。