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

发送端代码:.
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",//用户账号 guestPassword = "123456",//用户密码 guestVirtualHost = "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",//用户账号 guestPassword = "123456",//用户密码 guestVirtualHost = "VHostPath", //设置你设置的虚拟路径 默认是"/"AutomaticRecoveryEnabled = true //自动连接恢复};using (IConnection conn = connFactory.CreateConnection()){using (IModel channel = conn.CreateModel()){String queueName = String.Empty;if (args.Length > 0)queueName = args[0];elsequeueName = "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,这两个端口不能混为一谈。
方案:


三.效果
