.Net使用RabbitMQ实现短信密码重置的操作步骤

 更新时间:2024年09月10日 09:39:44   作者:似梦亦非梦  
在C#开发中,通过RabbitMQ实现短信服务可增强应用的消息通知能力,本文介绍了使用RabbitMQ发送短信的步骤,包括安装RabbitMQ客户端库、创建连接和通道、实现短信发送服务、配置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第一次访问慢的完美解决方案(MVC,Web Api)

    ASP.NET第一次访问慢的完美解决方案(MVC,Web Api)

    这篇文章主要给大家介绍了关于ASP.NET第一次访问慢的完美解决方案(MVC,Web Api)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单实例

    ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单实例

    下面小编就为大家分享一篇ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • .NET Core单元测试的两种方法介绍

    .NET Core单元测试的两种方法介绍

    这篇文章介绍了.NET Core单元测试的两种方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • VS2015使用scanf报错的解决方法

    VS2015使用scanf报错的解决方法

    这篇文章主要为大家详细介绍了VS2015使用scanf报错的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 配置Spring.Net框架开发环境

    配置Spring.Net框架开发环境

    这篇文章介绍了配置Spring.Net框架开发环境的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • Asp.Net模拟表单提交数据和上传文件的实现代码

    Asp.Net模拟表单提交数据和上传文件的实现代码

    这篇文章主要介绍了Asp.Net模拟表单提交数据和上传文件的实现代码,本文对3种情况都做了介绍,只有普通数据的表单、只上传文件的表单、包含普通数据和上传文件表单,需要的朋友可以参考下
    2014-08-08
  • ASP.NET Core依赖注入(DI)讲解

    ASP.NET Core依赖注入(DI)讲解

    本文详细讲解了ASP.NET Core依赖注入(DI),文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Log4net日志记录组件的使用步骤详解和下载

    Log4net日志记录组件的使用步骤详解和下载

    Log4net日志记录组件的使用步骤详解,需要的朋友可以参考一下
    2013-02-02
  • 在AspNetCore中使用极验做行为认证的验证流程

    在AspNetCore中使用极验做行为认证的验证流程

    这篇文章主要介绍了在AspNetCore中使用极验做行为认证的验证流程 ,本文有图文介绍有实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • 基于.NET的FluentValidation数据验证实现

    基于.NET的FluentValidation数据验证实现

    这篇文章主要介绍了基于.NET的FluentValidation数据验证实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论