1. 首先需要下载 Erlang, RabbitMQ基于Erlang语言开发:
这里下载19.3 Windows 64-bit的:
运行安装即可:
2. 下载 RabbitMQ windows平台版本:
安装(安装时会提示是否elr.exe访问私有网络,点击允许即可)
启动RabbitMQ后,它将以服务的方式运行:
默认情况下,对RabbitMQ的Web管理页面是没有开启的,需要手动开启:
开启后,默认端口为15672,默认用户为guest,其密码为:guest,注意,该用户只能在localhost域名下访问,外网是无法访问的,需要添加用户并分配角色,登陆后页面如下:
3. 上面安装完后,现在使用C#语言来测试使用以下。在.NET平台,需要先安装 .Net Rabbit客户端:
这里下载3.6.10版本的,面对.Net4.5版本的:
添加环境变量:
4. 创建消费者测试项目并添加引用:
添加对RabbitMQ.Client.dll的引用。编辑cs文件如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
namespace TestRabbitMQConsumer
{
class Program
{
static void Main(string[] args)
{
var conn_factory = new ConnectionFactory();
conn_factory.HostName = "localhost";
conn_factory.UserName = "guest";
conn_factory.Password = "guest";
IConnection conn = conn_factory.CreateConnection();
IModel channel = conn.CreateModel(); // 创建信道
channel.ExchangeDeclare("jim-exchange", ExchangeType.Direct, true, false, null);
channel.QueueDeclare("jim-queue", false, false, false, null);
channel.QueueBind("jim-queue", "jim-exchange", "jim");
QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel); // 订阅消费者
String consumer_tag = channel.BasicConsume("jim-queue", false, consumer); // 开始消费
while (true) { // 处理发来的消息
BasicDeliverEventArgs event_args = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); //消息为空则停止执行并等待消息到来
IBasicProperties msg_props = event_args.BasicProperties;
String msg_body = Encoding.ASCII.GetString(event_args.Body);
channel.BasicAck(event_args.DeliveryTag, false);
if (msg_body == "quit")
{
channel.BasicCancel(consumer_tag);
break;
}
else
{
Console.WriteLine($"Receive Message Body: {msg_body}");
}
}
Environment.Exit(0);
}
}
}
运行该消息消费者,因为还没有消息,因此,空白:
在Web管理后台我们可以看到一些相关信息:
5. 创建了消息消费者后,现在来实现消息生产者,创建新项目,对RabbitMQ.Client.dll引用同第4步配置,修改cs文件代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
namespace TestRabbitMQProducer
{
class Program
{
static void Main(string[] args)
{
var conn_factory = new ConnectionFactory();
conn_factory.HostName = "localhost";
conn_factory.UserName = "guest";
conn_factory.Password = "guest";
IConnection conn = conn_factory.CreateConnection();
IModel channel = conn.CreateModel();
channel.ExchangeDeclare("jim-exchange", ExchangeType.Direct, true, false, null);
String msg_body = "I am producer.";
IBasicProperties msg_props = channel.CreateBasicProperties();
msg_props.ContentType = "text/plain";
channel.BasicPublish("jim-exchange", "jim", msg_props, Encoding.ASCII.GetBytes(msg_body));
Environment.Exit(0);
}
}
}
生产者让交换器"jim-exchange",以键"jim"投递了消息,这样,在消费者端,就会按预定配置,获取消息体msg_body,消息体需要字节数组,因此这里使用Encoding.ASCII.GetBytes()来进行转换。
现在来启动消息生产者,并看看消费者是否能收到消息:
可以看到,消息传递成功了。我们也可以使用Web端来发送一个消息"haha",也能投递成功:
这里基于 .Net 平台实现消息生产和消费,同样,很方便可以移植到Java或python等其他平台上,实现系统异构化。