一、默认用户登录和账号注册
1.登录
安装好了RMQ之后,我们可以访问如下地址:
RabbitMQ Management
输入默认的管理员密码,4.1.0的管理员账号和密码是:
guest
guest
2.添加账号
consumer
consumer
添加成功后:
角色的对比:
标签 (中文) | 标签 (英文) | 描述 |
---|---|---|
管理 | Management | 用户可以访问管理插件。 |
政策制定者 | Policymaker | 用户可以访问管理插件,并管理他们有权访问的虚拟主机(vhosts)的策略和参数。 |
监听 | Monitoring | 用户可以访问管理插件,查看所有连接、通道以及节点相关信息。 |
管理员 | Administrator | 用户可以做监控可以做的所有事情,管理用户、虚拟主机和权限,关闭其他用户的连接,管理所有虚拟主机的策略和参数。 |
3.添加用户权限
我们刚刚添加了用户consumer,但是他不具备任何权限,我们可以为他配置权限,先点击进去
二、HelloWorld入门Demo
1.编写消费者代码并运行
class Program
{
static async Task Main(string[] args)
{
// 01 RabbitMQ 配置
string hostname = "localhost"; // RabbitMQ 主机名
string username = "consumer"; // RabbitMQ 账号
string password = "consumer"; // RabbitMQ 密码
string queueName = "hello"; // 队列名称,和生产者保持一致
var factory = new ConnectionFactory() { HostName = hostname, UserName = username, Password = password };
// 02 创建连接
using (var connection = await factory.CreateConnectionAsync())
using (var channel = await connection.CreateChannelAsync())
{
// 03 声明一个队列(队列名称,MQ持久化 重启不丢失=true,队列私有化 仅供第一个消费者使用=true,无人使用 自动删除=true ,附加参数)
await channel.QueueDeclareAsync(queueName, false, false, false, null);
// 04 创建消费者实例
var consumer = new AsyncEventingBasicConsumer(channel);
// 05 设置消息到达时的回调函数(相当于接收消息后,需要执行的方法)
consumer.ReceivedAsync += async (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);//将消息转换为字符串
Console.WriteLine($"消费者接受了信息:{message}");
// 处理完消息后手动签收确认消息
await channel.BasicAckAsync(ea.DeliveryTag, false);
Console.WriteLine("消息已确认: " + message);
};
// 06 启动消费者,开始接收消息(队列名称,需要手动签收消息=false,回调函数)
await channel.BasicConsumeAsync(queueName, false, consumer);
Console.WriteLine("消费者可点击Enter退出...");
Console.ReadLine();
}
}
}
此时我们可以观察到,管理网站的变化:
2.编写生产者代码并运行
class Program
{
static async Task Main(string[] args) // 将Main方法修改为异步方法
{
// 01 RabbitMQ 配置
string hostname = "localhost"; // RabbitMQ 主机名
string username = "guest"; // RabbitMQ 账号
string password = "guest"; // RabbitMQ 密码
string queueName = "hello"; // 队列名称
var factory = new ConnectionFactory() { HostName = hostname, UserName = username, Password = password };
// 02 创建连接
using (var connection = await factory.CreateConnectionAsync()) // 使用CreateConnectionAsync方法
using (var channel = await connection.CreateChannelAsync())
{
// 03 声明一个队列(队列名称,MQ持久化 重启不丢失=true,队列私有化 仅供第一个消费者使用=true,无人使用 自动删除=true ,附加参数)
await channel.QueueDeclareAsync(queueName, false, false, false, null);
// 04 编辑消息内容(存成字节数组形式)
string message = "Hello, World!";
byte[] body = Encoding.UTF8.GetBytes(message);
// 05 发送消息到队列(交换机名称 没用到可为空,队列名称,字节数组形式的消息内容)
await channel.BasicPublishAsync(string.Empty, queueName, body);
Console.WriteLine($"生产者发送了消息: {message}");
}
Console.WriteLine("生产者可点击Enter退出...");
Console.ReadLine();
}
}
此时观察控制台程序,说明已经完成“生产者-MQ-消费者”流程: