【发布时间】:2018-07-09 06:29:53
【问题描述】:
我正在向我的 Azure 服务总线队列添加一条消息并返回其 Guid 以保存在数据库中,但由于某种原因,我要么修改了某些内容,要么它一开始就无法正常工作。问题 - 我可以在不同的队列中拥有多个具有相同 id 但在同一总线上的消息 id 吗?我在同一总线上有 5 个队列,每个队列可能有一条消息 ID 为 ex 的消息。 100
var sequenceToCancel = await queueClient.ScheduleMessageAsync(message, endTime);
不返回任何东西!
而且整个堆栈跟踪有点只是在没有完成代码堆栈中的任何内容的情况下就弹出了!
消息被放入服务总线队列,但方法没有返回! 我尝试在它周围放置一个try catch,但它没有做任何事情,并且没有异常被抛出控制器中的堆栈。整个堆栈一直到控制器只是有点大便!所以控制器中的这个方法之后没有代码运行。
这是什么原因造成的?如何检查是否有任何错误?
这是完整的方法。
public async Task < long > CreatePostEventEmailMessage(int eventId, DateTime eventDateTime, YogaSpaceDuration duration, DateTime utcEventDateTime) {
string serviceBusConnectionString = System.Configuration.ConfigurationManager.AppSettings["ServiceBusConnectionString"];
string queueName = System.Configuration.ConfigurationManager.AppSettings["PostEventEmailQueueName"];
var queueClient = QueueClient.CreateFromConnectionString(serviceBusConnectionString, queueName);
int length = Convert.ToInt32(EnumHelper.GetDisplayName(duration).Split(' ')[0]); // end of class
var endTime = DateTime.SpecifyKind(utcEventDateTime.AddMinutes(length).AddMinutes(1), DateTimeKind.Utc);
BrokeredMessage message = new BrokeredMessage(eventId.ToString());
message.MessageId = eventId.ToString();
message.ScheduledEnqueueTimeUtc = endTime;
var sequenceToCancel = await queueClient.ScheduleMessageAsync(message, new DateTimeOffset(endTime));
await queueClient.CloseAsync(); // this line never gets hit
return sequenceToCancel; // this line never gets hit
}
仅供参考 - 有趣的事情就在这个方法之上我有另一个方法在另一个队列上做同样的事情,它工作正常!因此,我正在查看是否有名称拼写错误或配置不正确,但令人沮丧的是,如果是这种情况,我会认为我会看到异常或消息不会被放置在队列中?
【问题讨论】:
-
endTime在永不被击中的前一行的值是多少?也可以添加ScheduleMessageAsync的代码 -
endTime很好,将消息 ok 添加到队列中,ScheduleMessageAsync是 MS 库函数 -
不确定,但
endTime应该是DateTimeOffset,而这里看起来是DateTime。您确定转换是按照您认为的方式进行的吗?你真的在工作方法上做到了这一点吗? -
哦,你这里可能有东西!我将不得不做出一些改变。如果修复它,将发布我得到的任何结果!感谢您的建议!
-
Rafalon - 快速提问,这个值的 dateTimeOffset 是多少?我可以得到
ScheduledEnqueuerTimeUtc的日期时间,但它会是什么偏移量?
标签: c# azure asynchronous azureservicebus azure-servicebus-queues