/// <summary>
/// Hello 消息队列生产者
/// </summary>
/// <param name="message">需传递的消息内容</param>
public void ProjectSend(string message)
{
var factory = new ConnectionFactory();
// RabbitMq 服务地址
factory.HostName = "192.168.111.222";
// 用户名
factory.UserName = "zxr";
// 密码
factory.Password = "520886";
factory.Protocol = Protocols.DefaultProtocol;
factory.RequestedConnectionTimeout = 60;
factory.Port = AmqpTcpEndpoint.UseDefaultPort;
try
{
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
// 创建一个名为Hello 的消息队列
channel.QueueDeclare("Hello", false, false, false, null);
var body = Encoding.UTF8.GetBytes(message);
// 开始传递
channel.BasicPublish("", "Hello", null, body);
Console.WriteLine("Hello:内容已发送完毕");
Console.WriteLine($"发送内容为:{message}");
}
}
}
catch (Exception err)
{
throw err;
}
}
/// <summary>
/// Holle 消息队列消费者
/// </summary>
public void ProjectReceived()
{
var factory = new ConnectionFactory();
factory.HostName = "192.168.111.222";
factory.UserName = "zxr";
factory.Password = "520886";
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("Hello", false, false, false, null);
var consumer = new EventingBasicConsumer(channel);
channel.BasicConsume("Hello", false, consumer);
//获取并处理消息队列中的数据
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("已接收: {0}", message);
};
Console.ReadLine();
}
}
}
可能出现的问题:
1、Connection failed:因RabbitMQ的服务地址连接失败,服务地址因为 具体的IP 而填写locahost 可能导致此异常
2、None of the specified endpoints were reachable(指定的终结点都不可访问):HostName填写错误 或 新建的用户未设置权限会导致此异常。在生产环境 可能因为 防火墙未设置RabbitMQ的默认端口:5672 也会导致此异常发生。
设置RabbitMQ 用户的权限:
RabbitMQ 可视化页面->点击Admin ->点击新建的用户->点击下图指定位置即可