我的以下功能有问题,该功能将计划的消息添加到Azure服务总线队列。调用方法时,创建方法便会弹出
var sendCodeSequence = await queueClient.ScheduleMessageAsync(message,
new DateTimeOffset(endTime));
即使消息已添加到队列中,也不会在我的控制器中引发异常!
我的问题?
如果我在同一服务总线上的不同队列中多次使用相同的消息ID,即使它们都具有不同的序列ID,我也会在创建和删除每个队列时遇到麻烦吗? p>
我在代理消息构造器和消息ID属性中使用消息ID,这样可以吗,还是会导致添加更多并将其从队列中删除的问题?
例如我在同一服务总线名称空间上有5个不同的队列。并且可能会添加5条不同的消息,每个队列一个,所有消息都具有相同的代理消息ID。所以,不知道这是否会引起任何问题?
这是我使用事件ID作为消息ID将预定消息添加到队列的一种方法
public async Task <long> CreateHostPointCodeMessage(int eventId, YogaSpaceDuration duration, DateTime utcEventDateTime) {
string serviceBusConnectionString = System.Configuration.ConfigurationManager.AppSettings["ServiceBusConnectionString"];
string queueName = System.Configuration.ConfigurationManager.AppSettings["PreEventPointsCodeQueueName"];
var queueClient = QueueClient.CreateFromConnectionString(serviceBusConnectionString, queueName);
int length = Convert.ToInt16(EnumHelper.GetDisplayName(duration).Split(' ')[0]);
var endTime = DateTime.SpecifyKind(utcEventDateTime.AddMinutes(length).AddMinutes(-5), DateTimeKind.Utc);
BrokeredMessage message = new BrokeredMessage(eventId.ToString());
message.MessageId = eventId.ToString();
message.ScheduledEnqueueTimeUtc = endTime;
var sendCodeSequence = await queueClient.ScheduleMessageAsync(message, new DateTimeOffset(endTime));
await queueClient.CloseAsync();
return sendCodeSequence;
}
仅供参考-我正在使用“ Microsoft.ServiceBus.Messaging”将消息发送到队列,但是根据此MS article,我应该使用“ Microsoft.Azure.ServiceBus”,我不知道这是否有什么不同吗?
答案 0 :(得分:2)
将具有相同ID的消息发送到命名空间下的不同队列没有任何问题。
即使您可以将任意数量的具有相同ID的消息发送到同一队列,除非队列的RequiresDuplicateDetection属性设置为“ True”。
仅对于启用了“ RequiresDuplicateDetection”属性的队列,具有重复ID的消息将丢失。