程序员

试玩rabbitmq

首先说明一下,本人玩这个东西还不到两天,只是试验性的用了一下,不过感觉上还不错。

rabbitmq是什么?

简单来说,它就是一个消息队列。我们可以用一个程序扔消息进去,然后可以在另一个程序获取这个消息。

为何使用rabbitmq而不是用redis?

这个问题是一开始选择使用rabbitmq的时候的一个纠结的地方,因为消息队列,redis的队列也可以实现。让我决定使用rabbitmq的原因在于几个点。

1. rabbitmq有一种应答机制,客户端在接收到消息后要主动回应,消息才算处理了,不然下次重新获取信息还会获取回来。而redis用pop获取信息后,信息就没了。

2. 持久化,重启服务消息还在。(当然redis也可以持久化)

3. 灵活的接收机制,多种接收模式。

安装和简单的命令

参考的网址:

https://www.erlang-solutions.com/resources/download.html

https://packagecloud.io/rabbitmq/rabbitmq-server/install

https://github.com/rabbitmq/chef-cookbook/issues/189#issuecomment-69878404

我是用docker,镜像是centos7测试的。

第一步,安装erlang

wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm

rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

rpm –import https://packages.erlang-solutions.com/rpm/erlang_solutions.asc

yum install epel-release

第二部,安装rabbitmq

curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | /bin/bash

yum install rabbitmq-server

启动rabbitmq

rabbitmq-server start

停止rabbitmq

rabbitmqctl stop

列出rabbitmq的插件

rabbitmq-plugins list -v

启动一个插件(以rabbitmq的web版管理插件为例,启动后可以通过http://127.0.0.1:15672访问管理,添加插件要重启rabbitmq)

rabbitmq-plugins enable rabbitmq_management

注意web版管理界面默认使用账号guest和密码guest登陆,但是只允许本地访问,为了远程访问,请在/etc/rabbitmq/rabbitmq.config文件加入[{rabbit, [{loopback_users, []}]}].

并且重启rabbitmq

web管理界面截图

rabbitmq的一点点理解

有一个生产者源源不断的生成消息扔到rabbitmq,有一个消费者源源不断的从rabbitmq中获取数据。而rabbitmq作为消息的传递者,使用交换器和队列来实现消息传递。交换器负责把消息投递到各个队列,消费者在队列等着消息过来就好。

rabbitmq肯定有更强大的功能,只是本人刚刚接触,没办法挖掘核心部分,不过总的来说业务驱动技术,等有对应的需求再挖掘响应的功能也不迟。