.Net使用RabbitMQ實現(xiàn)短信密碼重置的操作步驟
在 C# 中使用 RabbitMQ 通過短信發(fā)送重置后的密碼到用戶的手機號上,你可以按照以下步驟進行
1.安裝 RabbitMQ 客戶端庫
首先,確保你已經(jīng)安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝:
dotnet add package RabbitMQ.Client
2.創(chuàng)建 RabbitMQ 連接和通道
創(chuàng)建一個 RabbitMQ 連接和通道,用于發(fā)送消息。
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.創(chuàng)建短信發(fā)送服務(wù)
創(chuàng)建一個短信發(fā)送服務(wù),用于處理從 RabbitMQ 接收到的消息并發(fā)送短信。
public class SmsService
{
public void SendSms(string phoneNumber, string message)
{
// 在這里實現(xiàn)短信發(fā)送邏輯
Console.WriteLine($"Sending SMS to {phoneNumber}: {message}");
}
}4.創(chuàng)建 RabbitMQ 消費者
創(chuàng)建一個 RabbitMQ 消費者,用于從隊列中接收消息并調(diào)用短信發(fā)送服務(wù)。
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.集成到用戶密碼重置流程
在你的用戶密碼重置流程中,生成新的密碼并將其發(fā)送到 RabbitMQ 隊列。
public class UserService
{
private readonly RabbitMQHelper _rabbitMQHelper;
public UserService(RabbitMQHelper rabbitMQHelper)
{
_rabbitMQHelper = rabbitMQHelper;
}
public void ResetPassword(Guid userId)
{
// 生成新的密碼
string newPassword = GeneratePassword();
// 將新密碼發(fā)送到 RabbitMQ 隊列
string message = $"Your new password is: {newPassword}";
_rabbitMQHelper.SendMessage(message);
// 其他邏輯,例如更新數(shù)據(jù)庫中的密碼
}
private string GeneratePassword()
{
// 生成隨機密碼的邏輯
return "random_password";
}
}6.啟動 RabbitMQ 消費者
在應(yīng)用程序啟動時,啟動 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 服務(wù)器正在運行。
示例代碼
以下是一個完整的示例代碼,展示如何使用 RabbitMQ 通過短信發(fā)送重置后的密碼到用戶的手機號上:
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)
{
// 在這里實現(xiàn)短信發(fā)送邏輯
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();
// 將新密碼發(fā)送到 RabbitMQ 隊列
string message = $"Your new password is: {newPassword}";
_rabbitMQHelper.SendMessage(message);
// 其他邏輯,例如更新數(shù)據(jù)庫中的密碼
}
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();
}
}到此這篇關(guān)于 .Net使用RabbitMQ實現(xiàn)短信密碼重置的文章就介紹到這了,更多相關(guān) .Net RabbitMQ密碼重置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET第一次訪問慢的完美解決方案(MVC,Web Api)
這篇文章主要給大家介紹了關(guān)于ASP.NET第一次訪問慢的完美解決方案(MVC,Web Api)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用ASP.NET具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
ASP.NET MVC下Ajax.BeginForm方式無刷新提交表單實例
下面小編就為大家分享一篇ASP.NET MVC下Ajax.BeginForm方式無刷新提交表單實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Asp.Net模擬表單提交數(shù)據(jù)和上傳文件的實現(xiàn)代碼
這篇文章主要介紹了Asp.Net模擬表單提交數(shù)據(jù)和上傳文件的實現(xiàn)代碼,本文對3種情況都做了介紹,只有普通數(shù)據(jù)的表單、只上傳文件的表單、包含普通數(shù)據(jù)和上傳文件表單,需要的朋友可以參考下2014-08-08
基于.NET的FluentValidation數(shù)據(jù)驗證實現(xiàn)
這篇文章主要介紹了基于.NET的FluentValidation數(shù)據(jù)驗證實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

