使用Azure WebJobs发送不同类型的电子邮件
本文关键字:同类型 电子邮件 Azure WebJobs 使用 | 更新日期: 2023-09-27 18:24:48
我正在寻找关于如何使用Azure WebJobs处理排队和发送不同类型电子邮件的建议。
在发送电子邮件之前,需要进行一些业务逻辑来撰写、填充然后发送。所以说我有10种不同类型的电子邮件
电子邮件的2个示例
1) 确认预订后,我想要之类的
var note = new BookingConfirmNotification() { BookingId = 2 }
SomeWayToQueue.Add(note)
2) 或者当我需要提醒用户做某事时
var reminder = new ReminderNotification() { UserId = 3 }
SomeWayToQueue.Add(reminder, TimeSpan.FromDays(1)
在WebJob上使用QueueTrigger为每种不同类型的电子邮件创建一个队列更好吗。。或者有更好的方法吗?
更新
所以我想你可以用不同的强类型类添加不同的函数/方法来触发不同的方法,但这似乎不起作用。
public void SendAccountVerificationEmail(
[QueueTrigger(WebJobHelper.EmailProcessorQueueName)]
AccountVerificationEmailTask task, TextWriter log)
{
log.WriteLine("START: SendAccountVerificationEmail: " + task.UserId);
const string template = "AccountVerification.cshtml";
const string key = "account-verification";
PrepareAndSend(user.Email, "Account confirmation", template, key, task, typeof(AccountVerificationEmailTask));
log.WriteLine("END: SendAccountVerificationEmail: " + task.UserId);
}
public void SendForgottonPasswordEmail(
[QueueTrigger(WebJobHelper.EmailProcessorQueueName)]
ForgottonPasswordEmailTask task, TextWriter log)
{
const string template = "ForgottonPassword.cshtml";
const string key = "forgotton-password";
PrepareAndSend(user.Email, "Forgotton password", template, key, task, typeof(ForgottonPasswordEmailTask));
}
这不起作用——当消息被添加到队列时,会随机触发不同的方法
如何使用WebJobs实现类似的功能?
您是说"compose/popuple"逻辑有点重,这就是为什么要对其进行排队?创建这些"发送电子邮件"任务的流程/实体是什么?
我可以看到你有一个Azure队列,在那里电子邮件请求被排队。假设你正在使用WebJobs SDK(如果你正在处理Azure存储队列等,你应该使用),你可以有一个功能来监控发送消息的队列。WebJobs SDK扩展包括SendGrid电子邮件绑定。你可以看到一个与你在这里描述的内容相近的例子。此示例根据传入队列消息发送电子邮件。以这种方式使用SDK,您将获得自动重试支持、中毒队列处理等。
关于您的最新问题。当多个使用者使用一个队列时,他们将"循环",这意味着消息分布在所有可用的使用者之间。这就解释了为什么这些方法看起来是随机发射的。
值得思考的事情。您可能想要颠倒事物并使用队列来捕获用户的交互。
在它的背后,你可以执行一个或多个动作。
例如。
_bus.Send(new BookingCreatedEvent{Ref="SomeRef", Customer="SomeCustomer"});
或
_bus.Send(new BookingCancelledEvent{Ref="SomeRef");
这样做的好处是你可以选择在消费方面做什么。现在你想发送一封电子邮件,但如果你也想登录数据库或将记录发送到你的CRM怎么办?
如果切换到Azure服务总线主题/订阅,则同一事件可以有多个处理程序。
public static void SendBookingConfirmation([ServiceBusTrigger("BookingCreated","SendConfirmation")] BookingCreatedEvent bookingDetails)
{
// lookup customer details from booking details
// send email to customer
}
public static void UpdateBookingHistory([ServiceBusTrigger("BookingCreated","UpdateBookingHistory")] BookingCreatedEvent bookingDetails)
{
// save booking details to CRM
}