asp.net - 通过 RabbitMQ 从生产者传递到接收者类
问题描述
有两种服务,API 和 smtp。用于购买某些产品的 API。当用户下订单时,他应该在他订购的邮件中收到一封信。
[HttpPost]
public async Task<IActionResult> Add(OrderCreateModel orderModel)
{
var orderAdd = _mapper.Map<OrderDto>(orderModel);
var orderCreated = await _orderService.AddAsync(orderAdd);
_messageService.Enqueue(orderCreated);
return CreatedAtAction(nameof(GetId), new { id = orderCreated.Id }, orderModel);
}
以下是收到订单时触发我的 SMTP 服务的方式:
public Task StartAsync(CancellationToken cancellationToken)
{
var factory = new ConnectionFactory()
{
HostName = _rabbitSettings.Value.HostName,
UserName = _rabbitSettings.Value.UserName,
Password = _rabbitSettings.Value.Password,
Port = _rabbitSettings.Value.Port,
VirtualHost = _rabbitSettings.Value.VirtualHost,
AutomaticRecoveryEnabled = _rabbitSettings.Value.AutomaticRecoveryEnabled
};
IConnection connection = factory.CreateConnection();
IModel model = connection.CreateModel();
model.QueueDeclare(queue: "order",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
var consumer = new EventingBasicConsumer(model);
consumer.Received += async (sender, e) =>
{
var body = Deserialize<Mail>(e.Body.ToArray());
await _mailService.SendMessageAsync(body);
};
model.BasicConsume("order", true, consumer);
return Task.CompletedTask;
}
哪个调用服务已经发送:
public async Task SendMessageAsync(Mail mail)
{
var email = new MimeMessage();
email.Sender = MailboxAddress.Parse(_mailSettings.Value.Mail);
email.To.Add(MailboxAddress.Parse(mail.Email));
email.Subject = mail.Subject;
var builder = new BodyBuilder();
builder.HtmlBody = mail.Body;
email.Body = builder.ToMessageBody();
using var smtp = new SmtpClient();
smtp.Connect(_mailSettings.Value.Host, _mailSettings.Value.Port, SecureSocketOptions.StartTls);
smtp.Authenticate(_mailSettings.Value.Mail, _mailSettings.Value.Password);
await smtp.SendAsync(email);
smtp.Disconnect(true);
}
这是硬编码的模型:
public class Mail
{
public string Email { get; set; } = "testingServiceSMTP@gmail.com";
public string Subject { get; set; } = "Greetings!";
public string Body { get; set; } = "Greetings!";
}
订单的结构如下:
{
"city": "Somecity",
"country": "SomeCountr",
"zipCode": "43523",
"userId": 1
}
那么我可以将订单详细信息传递给 Mail 吗?
解决方案
推荐阅读
- mysql - 如何在sql中实现这一点?
- javascript - JavaScript - 改变对象字面量的值
- sharepoint - 使用 Power 自动将 PDF 文件从 Sharepoint 文件夹复制到 FTP
- javascript - 如何在反应中从地图中获取第一个值
- javascript - React 光滑的轮播项目变得模糊
- azure - Azure B2C:使用自定义声明查询 AAD?
- security - 金融科技公司所需的认证
- swift - 如何使用 IPad 从 IPad 上的 View Image 获取点云(RGB,设备上的 2D 坐标,3D 点的坐标)?
- python - 防止exec内部python中的无限循环
- angular11 - 无法在 HTML (Angular) 上使用