RabbitMQ 使用入门
项目需要接触了几天 RabbitMQ ,在此把自己学习的东西记录下来和大家交流,望大家指教。
什么是 RabbitMQ
RabbitMQ主要是在AMQP协议标准基础上完成的,主要是用于大型应用程序,作为不同应用程序之间传递消息的组件,RabbitMQ包括Server和Client,一个server可以拥有多个Client。RabbitMQ也将Server称为broker,意为消息中间人。
RabbitMQ 安装
因为我是在64位win8.1环境使用MQ,并且是用于unity的,所以这里只介绍win8.1和unity的情况。安装过程基本参考官网教程
Erlang 环境安装
RabbitMQ是建立在Erlang OTP平台上的,所以要先安装Erlang环境,文件较大,Erlang下载,下载完直接按默认路径安装。RabbitMQ Server 安装
直接下载后按默认路径安装,下载地址,安装完成后在Start Menu 搜索RabbitMQ可以看到RabbitMQ Command Prompt和RabbitMQ Service-Start等,启动RabbitMQ。RabbitMQ Management Plugin 安装
这是一个RabbitMQ server的管理插件,可以在浏览器对server进行可视化管理,打开RabbitMQ Command Prompt,在命令行中输入一下命令:rabbitmq-plugins enable rabbitmq_management
安装完成后再浏览器输入 http://localhost:15672/ 可以看到如下界面,表示安装成功
Client 客户端下载
我下的是.NET/C#版本的,但要注意的是再unity4.0中不支持rabbitmq-dotnet-client-3.5.4-dotnet-4.0,我用的是rabbitmq-dotnet-client-3.4.4-dotnet-3.5,下载地址,.NET版本的Client直接将其中的dll和xml文件取出放在程序目录中使用就行。
tips:注意安装过程全部选择默认路径,这样安装后无需配置环境变量即可使用
RabbitMQ 简易使用
RabbitMQ还有很多复杂的操作,这里只介绍简单的使用以及我自己的理解,主要参考360doc的一篇文章RabbitMQ中 exchange、route、queue的关系 和优快云一位博主的系列文章rabbitmq用法
“Hello World!”
- 基本概念
Producer :发送消息的客户端
Consumer : 接收消息的客户端
Queue :Producer发送的消息的存放地方,Consumer从其中获取消息 实例(以下的代码都以在unity中的使用方法为例 )
Producer(P)发送单个消息”Hello World”到指定的队列,Consumer(C)从队列中读取这个消息Sending
using UnityEngine; using System.Collections; using System.Threading; using RabbitMQ.Client; using System.Text; public class MQSenderV2 : MonoBehaviour { void Start () { Thread t = new Thread (new ThreadStart (ProcessMsg)); t.Start (); } void ProcessMsg() { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.ExchangeDeclare("topic_logs", "topic"); channel.QueueDeclare("blowball_data", false, false, false, null); channel.QueueBind("blowball_data", "topic_logs", "blowball.data.*"); var routingKey = "blowball.data.test"; var routingKey2 = "blowball.data.PK"; var routingKey3 = "BBBGoal.data"; int i; var body = Encoding.UTF8.GetBytes(""); for(i=0;i<3;i++) { body = Encoding.UTF8.GetBytes(message[i]); channel.BasicPublish("topic_logs", routingKey, null, body); } Debug.Log("send side: "+"\n"+"routingKey: "+routingKey+"\nmessage: "+message); } } } }