|
在 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();
- }
- }
复制代码 来源:https://www.cnblogs.com/chenshibao/p/18402707
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|