Existe uma maneira elegante de enviar e-mails usando um serviço/fila do Service Broker?
Quero configurar um EVENT NOTIFICATION
para o SQL Server e enviar e-mails aos operadores para cada mensagem na fila.
Segundo o livro SQL Server 2005 DBA Street Smarts: A Real World Guide to SQL Server 2005 Certification Skills
, o Database Mail utiliza o Service Broker:
Além disso, o Database Mail é escalável porque usa a fila do Service Broker, que permite que as solicitações sejam tratadas de forma assíncrona e até salva a solicitação se o servidor cair antes que ela possa ser tratada.
Talvez eu esteja muito errado aqui, mas existe uma maneira de enviar mensagens diretamente para a fila do Database Mail usando o Service Broker?
Se eu tiver que configurar um procedimento armazenado para enviar um e-mail em nome do Service Broker, acho que seria mais fácil apenas configurar um trabalho no SQL Server Agent para verificar os eventos nos quais estou interessado dentro do erro log e enviar um e-mail aos operadores.
Estou aberto a sugestões.
Quando você invoca
sp_send_dbmail
, é exatamente isso que está acontecendo.Então faça exatamente isso. Crie um procedimento armazenado ativado na fila do seu serviço que recebe as notificações e faça com que ele RECEBA a mensagem e invoque
sp_send_dbmail
.Acho que você está tentando 'cortar o intermediário' e fazer com que a NOTIFICAÇÃO DE EVENTO envie a notificação diretamente para a fila do DB Mail. Isso não é possível porque o código que manipula as mensagens que chegam na fila do DB Mail espera que as mensagens tenham um determinado formato (ou seja, aquele criado por
sp_send_dbmail
). As mensagens enviadas por Event Notifications teriam um formato completamente diferente e o processador do DB Mail travaria por não entendê-las. Para evitar exatamente essa situação, os serviços do Service Broker estão vinculados a contratos específicos e o serviço DB Mail não aceita ohttp://schemas.microsoft.com/SQL/Notifications/PostEventNotification
contrato usado pelo Event Notifications.