.NET Core 使用RabbitMQ 之 应用实例

一.新建2个控制台程序分别为发送和接受

.NET Core 使用RabbitMQ 之 应用实例

发送端代码:.

using RabbitMQ.Client;using System;using System.Text;
namespace rabitmq.core.send{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("Start");            IConnectionFactory conFactory = new ConnectionFactory//创建连接工厂对象            {                   HostName = "192.168.1.100",//IP地址                Port = 5672,//端口号                UserName = "liee",//用户账号 guest                Password = "123456",//用户密码  guest                VirtualHost = "VHostPath", //设置你设置的虚拟路径 默认是"/"                AutomaticRecoveryEnabled = true //自动连接恢复            };            using (IConnection con = conFactory.CreateConnection())//创建连接对象            {                using (IModel channel = con.CreateModel())//创建连接会话对象                {                    String queueName = String.Empty;                    if (args.Length > 0)                    {                        queueName = args[0];                    }                    else                    {                        queueName = "queue1";                    }                    //声明一个队列                    channel.QueueDeclare(                      queue: queueName,//消息队列名称                      durable: false,//是否缓存                      exclusive: false,                      autoDelete: false,                      arguments: null                       );                    while (true)                    {                        Console.WriteLine("消息内容:");                        String message = Console.ReadLine();                        //消息内容                        byte[] body = Encoding.UTF8.GetBytes(message);                        //发送消息                        channel.BasicPublish(exchange: "", routingKey: queueName, basicProperties: null, body: body);                        Console.WriteLine("成功发送消息:" + message);                    }                }            }        }    }}

接收端代码:

using RabbitMQ.Client;using RabbitMQ.Client.Events;using System;using System.Text;
namespace rabitmq.core.Receive{  public  class Program    {        static void Main(string[] args)        {            Console.WriteLine("Start");            IConnectionFactory connFactory = new ConnectionFactory//创建连接工厂对象            {                HostName = "192.168.1.100",//IP地址                Port = 5672,//端口号                UserName = "liee",//用户账号 guest                Password = "123456",//用户密码  guest                VirtualHost = "VHostPath", //设置你设置的虚拟路径 默认是"/"                AutomaticRecoveryEnabled = true //自动连接恢复        };            using (IConnection conn = connFactory.CreateConnection())            {                using (IModel channel = conn.CreateModel())                {                    String queueName = String.Empty;                    if (args.Length > 0)                        queueName = args[0];                    else                        queueName = "queue1";                    //声明一个队列                    channel.QueueDeclare(                      queue: queueName,//消息队列名称                      durable: false,//是否缓存                      exclusive: false,                      autoDelete: false,                      arguments: null                       );                    //创建消费者对象                    var consumer = new EventingBasicConsumer(channel);                    consumer.Received += (model, ea) =>                    {                        var bodyBytes = ea.Body;                        var message = Encoding.UTF8.GetString(bodyBytes.ToArray());                        Console.WriteLine("接收到信息为:" +message.ToString());                    };                    //消费者开启监听                    channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);                    Console.ReadKey();                }            }        }    }}

二. 问题解决

2.1 遇到异常解决方法

RabbitMQ.Client.Exceptions.BrokerUnreachableException:“None of the specified endpoints were reachabl

原因

如错误信息中所示:找不到 virtual host

通过 guest 只能本地访问 localhost:15672/,并不能实现远程访问,所以当远程访问时,需要添加新用户才能访问。1、进入 RabbitMQ 的 sbin 目录,打开 cmd2、输入 rabbitmqctl add_user liee 123456 创建一个叫 liee密码 123456 的用户3、输入 rabbitmqctl set_user_tags liee administrator 设置用户为管理员4、输入 rabbitmqctl add_vhost VHOST 创建一个叫 VHOST 的虚拟用户目录5、rabbitmqctl set_permissions -p VPHOST liee ".*" ".*" ".*" 为用户设置权限到这里,就可以通过 目标ip:15672/ 访问远程 rabbitmq 了,前提是从你这里的电脑到目标服务器中途的所有防火墙都允许15672端口的访问,如果是在阿里云上面的服务器,那么不仅需要打开服务器的端口,还需要打开阿里云的端口6、如果是在程序代码里使用 rabbitmq,还需要打开所有防火墙的 5672端口,因为 rabbitmq 的默认监听端口是 5672,网页管理的端口是 15672,这两个端口不能混为一谈。

方案:

.NET Core 使用RabbitMQ 之 应用实例

.NET Core 使用RabbitMQ 之 应用实例

三.效果

.NET Core 使用RabbitMQ 之 应用实例