假设我有一个球队,一个主题,一个子球。和三个客户订阅。
我发送消息。
第一个客户端收到一条消息并调用complete()动作。
第二个客户端会收到一条消息吗?
如果有客户订阅了它,该怎么办?
问题是 - 什么时候将消息完全从queve/topic/subscription中删除?
P.S. “一对一”的案例很清楚。
假设我有一个球队,一个主题,一个子球。和三个客户订阅。
我发送消息。
第一个客户端收到一条消息并调用complete()动作。
第二个客户端会收到一条消息吗?
如果有客户订阅了它,该怎么办?
问题是 - 什么时候将消息完全从queve/topic/subscription中删除?
P.S. “一对一”的案例很清楚。
我会建议您查看竞争消费者模式。 (https://msdn.microsoft.com/en-us/library/dn568101.aspx?f=255&MSPPError=-2147217396)。
您可以有许多角色(即Azure Worker Role)检查队列中的消息(竞争消费者),并在处理时专门锁定它们。每个角色都在为消息而奋斗,而第一个抓住它的人(偶然),目前它是“独占”的。如果获取并处理消息的消费者成功,则运行Complete()方法,否则执行Abandon(消息)。 Complete()完成了它,并且Abandon将它抛回到竞争消费者的狂热中。如果你身体健康,你甚至可以再次抓住它!
您可以在Azure管理门户中设置死信息参数,以确定可以为其他用户重新引入的次数。在某些情况下,事情不能正常工作,所以杀掉消息以便其他消息可以继续畅通无阻。
让我知道你是否有更具体的需求。很乐意提供帮助。这种模式非常有效。
最要好的问候...