RabbitMQ的安装与使用

2 篇文章 0 订阅
0 篇文章 0 订阅

本文主要介绍window平台下RabbitMQ和protobuf的结合使用。

目录

1. RabbitMQ的简介

2.RabbitMQ的安装

3. RabbitMQ的使用(基于本地服务器)

4. 后续学习



1. RabbitMQ的简介

RabbitMQ是一种消息队列,实现了AMQP协议——消息中间件。通俗一点的解释就是担任了类似于邮局的工作。你想象一下你在发邮件的时候,这个邮件是如何被你朋友收到的呢?你只需要将信封塞到邮箱,而你朋友只需要在收件箱里面接收,剩下的工作全部交给了后台服务。当然这不是一两句话能说清楚里面的细节,所以提供官网链接,以备想深入了解的读者.


2.RabbitMQ的安装

RabbitMQ是用Erlang编写的,Erlang是世界著名的通信服务厂商——爱立信开发的,它的特点是原生支持高并发,所以特别适合应用在通信领域。所以我们首先需要安装Erlang。首先,进入RabbitMQ的下载页,滑到下面的下载页:

点击Download,跳转到下载页,在RabbitQM server栏目下选择与你系统对应的版本(以Windows为例):

直接选择绿色框框中的版本。进入下载页:

点击即可开始下载,上面是rabbitmq的可执行文件,在安装之前我们还需要 安装Erlang。其实在上图显示的页面有详细的安装教程。这里直接给出Erlang的下载链接,单机进入后,选择对应的版本:

我这里直接选择64位的可执行版本。

好了,我们下载了 2个可执行的文件,剩下的安装就是鼠标点点点。记住要先装Erlang,直接装RabbitMq时会报错。安装成功之后,在你的开始菜单里面就可以看到RabbitMq的新添加文件:

选择RabbitMQ Service -start就可以启动RabbitMQ了。 


3. RabbitMQ的使用(基于本地服务器)

这里我们基于C#语言,所以选择VS建立一个项目,我给项目的取名为rabbitmq_Send .首先要给项目添加RabbitMQ链接库:选择项目->管理NuGet程序包:

进入管理页面,点击浏览,搜索RabbitMQ,找到一个叫RabbitMQ.Client的包,点击,然后安装:

因为我这里已经安装过了,所以可以只能选择卸载,没有安装的话,会是安装按钮。安装好了之后在你的项目引用中就可以找RabbitMQ.Client:  这样我们就是使用:

using RabbitMQ.Client;

把下面的代码复制到你的Main函数:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RabbitMQ.Client;
using System.Text;

namespace rabbitmq_Send
{
    public class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            
            using (var channel = connection.CreateModel())
            {
                channel.QueueDeclare(queue: "hello",
                    durable: false,
                    exclusive: false,
                    autoDelete: false,
                    arguments: null);

                string message = "你好啊,我是秦始皇!";
                var body = Encoding.UTF8.GetBytes(message);
                channel.BasicPublish(exchange: "",
                    routingKey: "hello",
                    basicProperties: null,
                    body: body);
                    
                Console.WriteLine($"发送消息为: {message}");
            }
            Console.WriteLine("按 【回车】键退出。");
            Console.ReadLine();

        }
    }
}

上面的代码基本上和官方的示例一致,所以代码的理解可以参考这里,(项目的命名空间用你自己的)。

有了发送端,我们还需建立一个接收项目。在该解决方案下添加一个新项目,我取名为rabbitmq_Receive.同样为该项目添加RabbitMQ.Client.将下面的代码复制到Program.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 rabbitmq_Receive
{
    class Program
    {
        static void Main(string[] args)
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            using (var channel = connection.CreateModel())
            {
                channel.QueueDeclare(queue: "hello",
                    durable: false,
                    exclusive: false,
                    autoDelete: false,
                    arguments: null);
                var consumer = new EventingBasicConsumer(channel);
                consumer.Received += (model, ea) =>
                  {
                      var body = ea.Body;
                      var message = Encoding.UTF8.GetString(body);
                      Console.WriteLine($"接收到的消息是: {message}");
                  };
                channel.BasicConsume(queue: "hello",
                    autoAck: true,
                    consumer: consumer);
                Console.WriteLine("请按【Enter】键退出。");
                Console.ReadLine();

            }
        }
    }
}

同样官网有详细的说明。剩下的就是运行这两个项目了,首先运行接收程序,运行结果如下:

接收端会不断的去消息队列中取消息。然后我们再运行发送端,你可能会问,我们已经运行了 一个项目,怎么再运行第二个呢?

有办法的,VS早为我们想好了。如下图所示:我们点击运行"新实例",就可以让send也同时运行起来。

运行后的结果如下:

可以看到一运行send,接收端立马收到了消息。其中Send程序在发送后自动结束,而接收程序则仍在运行,再次运行shend,则接收端仍然会收到消息。


4. 后续学习

你肯定不想只是利用本地服务器来进行消息传输,所以你当然可以利用远端服务器,在构造服务器时你只需要给出远端服务器的IP地址就可以。

当然,你也不想只是用来传输字符串,你可能想用来传输图像,声音,甚至视频,我们再前面的代码中可以看到,我们将一段文字(string)类型转化为了字节数组,说明RabbitMq的传输单位是字节,也就是是二进制流,所以我们把图像,视频文件转化为 了字节数组,那么就可以通过RabbitMQ传输,接收端接收二进制后再恢复成原来的图像或者视频,当然在传输之前如果能将图像视频压缩一下,可能会更快。

甚至,我想传输一个对象,只要能将对象序列化成二进制文件,就可以,只是从二进制恢复成对象,或将对象转化为特定的二进制格式,实现起来比较复杂,这里我向大家推荐一个新工具:ProtoBuf,是由google开发的,官网有详细资料。以后可能会给大家介绍一些相关知识。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值