RabbitMQ 是部署最广泛的开源消息代理
1、NUGET引用RabbitMQ库
2、使用
public IConnection GetConnection(string hostName, string userName, string password)
{
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.HostName = hostName;
connectionFactory.Port = 80;
connectionFactory.VirtualHost = "/";
connectionFactory.UserName = userName;
connectionFactory.Password = password;
return connectionFactory.CreateConnection();
}
private IModel channel = null;//会话模型
//初始化连接
public void main()
{
IConnection connection = GetConnection("hostName", "userName", "password");
channel = connection.CreateModel();
EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
consumer.Received += Consumer_Received;
channel.BasicConsume("queue", false, consumer);
}
//接收消息
private void Consumer_Received(object sender, BasicDeliverEventArgs e)
{
string message = Encoding.UTF8.GetString(e.Body.ToArray());
if (message.StartsWith("msg"))
{
//处理含关键字的消息,否则退回
Console.WriteLine($"确认");
channel.BasicAck(deliveryTag: e.DeliveryTag, multiple: false);
}
else
{
Console.WriteLine($"拒绝");
channel.BasicReject(deliveryTag: e.DeliveryTag, requeue: false);
}
}
//发送消息
public void Send(string data)
{
channel.QueueDeclare("queue", false, false, false, null);
channel.BasicPublish(string.Empty, "queue", null, Encoding.UTF8.GetBytes(data));
}