.Net使用RabbitMQ实现短信密码重置的操作步骤
在 C# 中使用 RabbitMQ 通过短信发送重置后的密码到用户的手机号上,你可以按照以下步骤进行
1.安装 RabbitMQ 客户端库
首先,确保你已经安装了 RabbitMQ 客户端库。你可以通过 NuGet 包管理器来安装:
dotnet add package RabbitMQ.Client
2.创建 RabbitMQ 连接和通道
创建一个 RabbitMQ 连接和通道,用于发送消息。
using RabbitMQ.Client; using System; using System.Text; public class RabbitMQHelper { private readonly string _hostName; private readonly string _userName; private readonly string _password; private readonly string _queueName; public RabbitMQHelper(string hostName, string userName, string password, string queueName) { _hostName = hostName; _userName = userName; _password = password; _queueName = queueName; } public void SendMessage(string message) { var factory = new ConnectionFactory() { HostName = _hostName, UserName = _userName, Password = _password }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: _queueName, durable: false, exclusive: false, autoDelete: false, arguments: null); var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: _queueName, basicProperties: null, body: body); Console.WriteLine($" [x] Sent {message}"); } } }
3.创建短信发送服务
创建一个短信发送服务,用于处理从 RabbitMQ 接收到的消息并发送短信。
public class SmsService { public void SendSms(string phoneNumber, string message) { // 在这里实现短信发送逻辑 Console.WriteLine($"Sending SMS to {phoneNumber}: {message}"); } }
4.创建 RabbitMQ 消费者
创建一个 RabbitMQ 消费者,用于从队列中接收消息并调用短信发送服务。
using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text; public class RabbitMQConsumer { private readonly string _hostName; private readonly string _userName; private readonly string _password; private readonly string _queueName; private readonly SmsService _smsService; public RabbitMQConsumer(string hostName, string userName, string password, string queueName, SmsService smsService) { _hostName = hostName; _userName = userName; _password = password; _queueName = queueName; _smsService = smsService; } public void StartConsuming() { var factory = new ConnectionFactory() { HostName = _hostName, UserName = _userName, Password = _password }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: _queueName, durable: false, exclusive: false, autoDelete: false, arguments: null); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); var phoneNumber = "user_phone_number"; // 从消息中解析出手机号 _smsService.SendSms(phoneNumber, message); }; channel.BasicConsume(queue: _queueName, autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } } }
5.集成到用户密码重置流程
在你的用户密码重置流程中,生成新的密码并将其发送到 RabbitMQ 队列。
public class UserService { private readonly RabbitMQHelper _rabbitMQHelper; public UserService(RabbitMQHelper rabbitMQHelper) { _rabbitMQHelper = rabbitMQHelper; } public void ResetPassword(Guid userId) { // 生成新的密码 string newPassword = GeneratePassword(); // 将新密码发送到 RabbitMQ 队列 string message = $"Your new password is: {newPassword}"; _rabbitMQHelper.SendMessage(message); // 其他逻辑,例如更新数据库中的密码 } private string GeneratePassword() { // 生成随机密码的逻辑 return "random_password"; } }
6.启动 RabbitMQ 消费者
在应用程序启动时,启动 RabbitMQ 消费者以处理消息。
public class Program { public static void Main(string[] args) { string hostName = "localhost"; string userName = "guest"; string password = "guest"; string queueName = "sms_queue"; var smsService = new SmsService(); var rabbitMQConsumer = new RabbitMQConsumer(hostName, userName, password, queueName, smsService); // 启动消费者 rabbitMQConsumer.StartConsuming(); } }
7.配置 RabbitMQ 连接信息
确保你的 RabbitMQ 连接信息(主机名、用户名、密码、队列名)是正确的,并且 RabbitMQ 服务器正在运行。
示例代码
以下是一个完整的示例代码,展示如何使用 RabbitMQ 通过短信发送重置后的密码到用户的手机号上:
using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text; public class RabbitMQHelper { private readonly string _hostName; private readonly string _userName; private readonly string _password; private readonly string _queueName; public RabbitMQHelper(string hostName, string userName, string password, string queueName) { _hostName = hostName; _userName = userName; _password = password; _queueName = queueName; } public void SendMessage(string message) { var factory = new ConnectionFactory() { HostName = _hostName, UserName = _userName, Password = _password }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: _queueName, durable: false, exclusive: false, autoDelete: false, arguments: null); var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: _queueName, basicProperties: null, body: body); Console.WriteLine($" [x] Sent {message}"); } } } public class SmsService { public void SendSms(string phoneNumber, string message) { // 在这里实现短信发送逻辑 Console.WriteLine($"Sending SMS to {phoneNumber}: {message}"); } } public class RabbitMQConsumer { private readonly string _hostName; private readonly string _userName; private readonly string _password; private readonly string _queueName; private readonly SmsService _smsService; public RabbitMQConsumer(string hostName, string userName, string password, string queueName, SmsService smsService) { _hostName = hostName; _userName = userName; _password = password; _queueName = queueName; _smsService = smsService; } public void StartConsuming() { var factory = new ConnectionFactory() { HostName = _hostName, UserName = _userName, Password = _password }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: _queueName, durable: false, exclusive: false, autoDelete: false, arguments: null); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); var phoneNumber = "user_phone_number"; // 从消息中解析出手机号 _smsService.SendSms(phoneNumber, message); }; channel.BasicConsume(queue: _queueName, autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } } } public class UserService { private readonly RabbitMQHelper _rabbitMQHelper; public UserService(RabbitMQHelper rabbitMQHelper) { _rabbitMQHelper = rabbitMQHelper; } public void ResetPassword(Guid userId) { // 生成新的密码 string newPassword = GeneratePassword(); // 将新密码发送到 RabbitMQ 队列 string message = $"Your new password is: {newPassword}"; _rabbitMQHelper.SendMessage(message); // 其他逻辑,例如更新数据库中的密码 } private string GeneratePassword() { // 生成随机密码的逻辑 return "random_password"; } } public class Program { public static void Main(string[] args) { string hostName = "localhost"; string userName = "guest"; string password = "guest"; string queueName = "sms_queue"; var smsService = new SmsService(); var rabbitMQConsumer = new RabbitMQConsumer(hostName, userName, password, queueName, smsService); // 启动消费者 rabbitMQConsumer.StartConsuming(); } }
到此这篇关于 .Net使用RabbitMQ实现短信密码重置的文章就介绍到这了,更多相关 .Net RabbitMQ密码重置内容请搜索科站长以前的文章或继续浏览下面的相关文章希望大家以后多多支持科站长!
栏 目:ASP.NET
下一篇:ASP.NET MVC 迅速集成 SignalR的过程
本文标题:.Net使用RabbitMQ实现短信密码重置的操作步骤
本文地址:https://www.fushidao.cc/wangluobiancheng/3269.html
您可能感兴趣的文章
- 03-31详解如何在.NET代码中使用本地部署的Deepseek语言模型
- 02-06.net core如何使用Nacos注册中心
- 01-28使用.NET8构建一个高效的时间日期帮助类
- 01-26.NET Core GC压缩(compact_phase)底层原理解析
- 01-24在ASP.NET中读写TXT文本文件的多种方法
- 01-24在ASP.NET中读写XML数据的多种方法
- 01-24.NET轻松实现Excel转PDF的三种方法详解
- 01-23.NET9 AOT部署方案详解
- 01-23.NET NativeAOT 用法指南
- 01-23iis部署前后端分离项目全过程(Vuet前端和.NET6后端)


阅读排行
推荐教程
- 03-31详解如何在.NET代码中使用本地部署的Deepseek语言模型
- 11-23移动互联网广告有哪些模式?
- 11-22.net 应对网站访问压力的方案总结
- 11-22详解ASP.NET提取多层嵌套json数据的方法
- 11-23网站投放广告如何达到最好的效果
- 11-22.net 应对网站访问压力的方案总结
- 11-23网站打开速度慢解决办法
- 11-23草根站长为什么喜欢做门户站
- 11-22ASP.NET MVC分页问题解决
- 11-22ASP.NET编程简单实现生成静态页面的方法