.NetCore 连接RabbitMQ 示例代码

使用NuGet包管理器控制台安装RabbitMQ 库:RabbitMQ.Client

用程序包管理器控制台:Install-Package RabbitMQ.Client -Version 6.5.0

生产者:


using RabbitMQ.Client;
using System.Text;

ConnectionFactory factory = new()
{
    HostName = "192.168.1.134",
    Port = AmqpTcpEndpoint.UseDefaultPort, //5672,
    UserName = "RabbitMQ用户名",
    Password = "RabbitMQ密码",
    DispatchConsumersAsync = true
};


//创建连接对象
var connection = factory.CreateConnection();
//创建一个管道
var channel = connection.CreateModel();
//创建一个交换机
string ExchangeName = "FirstExchange";
channel.ExchangeDeclare(ExchangeName, "direct");
//创建一个队列
string QueryName = "FirstQuery";
channel.QueueDeclare(QueryName, durable: true, exclusive: false, autoDelete: false, arguments: null);
//把队列绑定到交换机
string RoutingKey = "Info_FirstRoutingKey";
channel.QueueBind(QueryName, ExchangeName, RoutingKey);
var prop = channel.CreateBasicProperties();
prop.DeliveryMode = 2;
for (int i = 0; i < 100; i++)
{
    string msg = $"我发送了一条消息:{i}";
    byte[] bytes = Encoding.UTF8.GetBytes(msg);
    channel.BasicPublish(ExchangeName, RoutingKey, mandatory: true, basicProperties: prop, bytes);
    Console.WriteLine(msg);
    Task.Delay(3000).Wait();
}

Console.ReadLine();

消费者:

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;

ConnectionFactory factory = new()
{
    HostName = "192.168.1.134",
    Port = 5672,
    UserName = "RabbitMQ用户名",
    Password = "RabbitMQ密码",
    DispatchConsumersAsync = true
};


//创建连接对象
var connextion = factory.CreateConnection();
//创建一个管道
var channel = connextion.CreateModel();
//创建一个交换机
string ExchangeName = "FirstExchange";
channel.ExchangeDeclare(ExchangeName, "direct");
//创建一个队列
string QueryName = "FirstQuery";
channel.QueueDeclare(QueryName, durable: true, exclusive: false, autoDelete: false, arguments: null);
//把队列绑定到交换机
string RoutingKey = "Info_FirstRoutingKey";
channel.QueueBind(QueryName, ExchangeName, RoutingKey);

//创建一个事件对象
AsyncEventingBasicConsumer consumer = new(channel);
consumer.Received += Consumer_Received;
channel.BasicConsume(QueryName, false, consumer);
async Task Consumer_Received(object? sender, BasicDeliverEventArgs e)
{
    try
    {
        //获取消息
        var body = e.Body;
        var msg = Encoding.UTF8.GetString(body.ToArray());
        var routingKey = e.RoutingKey;//获取队列名
        Console.WriteLine($"Message is {msg},RoutingKey:{routingKey}");
        channel.BasicAck(e.DeliveryTag, false);
        await Task.Delay(800);
    }
    catch (Exception ex)
    {
        Console.WriteLine("错误信息:" + ex.ToString());
        channel.BasicReject(e.DeliveryTag, true);
    }
}

Console.ReadLine();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值