消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。
接下来我们来开始学习Rabbit消息队列
-
安装Rabbit:
安装Rabbit不只是单纯的安装Rabbit 使用Rabbit 需要先安装Erlang环境,
安装时傻瓜式教学直接下一步下一步就可以了不需要额外的点什么
-
激活Rabbit服务
下载好了之后进入到该RabbiMQ-servert的sbin文件夹里面进行激活服务
在此文件夹里面进行dose命令
./rabbitmq-plugins enable rabbitmq_management
然后重启服务就可以啦dose命令如下:
net stop rabbitmq && net start rabbitmq
然后进入Rabbit网址:默认的网址是:localhost:15672 密码和用户名都是:guest
页面如下:
登录后页面如下:
-
写入rabbitMQ
我们创建一个控制台应用(.NET Framework):
里面编写如下代码:
static void Main(string[] args)
{
//创建一个链接的工厂类
ConnectionFactory connectionFactory = new ConnectionFactory() { HostName = "localhost", UserName = "guest", Password = "guest", Port = 5672 };
//创建链接
using (var conn = connectionFactory.CreateConnection())
{
//创建通道
using (var chapp = conn.CreateModel())
{
创建一个交换机
//chapp.ExchangeDeclare("交换机名字","交换机类型");
chapp.ExchangeDeclare("myexchang", "direct");
创建一个消息队列
//chapp.QueueDeclare("消息队列名称",是否持久性,排外性,是否自动删除,参数);
chapp.QueueDeclare("FGY",false,false,false,null);
//把交换机和队列进行关联
//chapp.QueueBind("消息队列名称", "交换机名字", "关联名");
chapp.QueueBind("FGY", "myexchang", "keyy");
把消息放在交换机里面
byte[] byt = Encoding.UTF8.GetBytes("卧槽");
//chapp.BasicPublish("交换机名字", "关联名", 属性,参数);
chapp.BasicPublish("myexchang", "keyy", null,byt);
}
}
}
}
运行后在rabbit页面里面可以看到存储的消息如图所示
基础的写入rabbit就完成了
接下里就是读取
-
读取RabbitMQ
我们写一个消息消费的事件用于读取消息:
//消息消费的事件
private static void Shi(object sander,BasicDeliverEventArgs e) {
byte[] aa = e.Body;
string msg = Encoding.UTF8.GetString(aa);
Console.WriteLine(msg);
}
在主函数里面调用一下这个方法
static void Main(string[] args)
{
//创建一个链接的工厂类
ConnectionFactory connectionFactory = new ConnectionFactory() { HostName = "localhost", UserName = "guest", Password = "guest", Port = 5672 };
//创建链接
using (var conn = connectionFactory.CreateConnection())
{
//创建通道
using (var chapp = conn.CreateModel())
{
//绑定信息消费事件
EventingBasicConsumer Consumer = new EventingBasicConsumer(chapp);
Consumer.Received += Shi;
//消费消息
// chapp.BasicConsume("消息队列名词",是否立马应答,绑定的事件);
chapp.BasicConsume("FGY",false, Consumer);
//Console.ReadLine();放在里面和放在外面的区别:放在外面对象会被释放不会执行
Console.ReadLine();
}
}
}
效果如下:
都到这儿了继续记录一下消息队列的类型区别:
-
消息队列的区别
消息队列就先了解到这儿吧。