RabbitMQ 入門指南——安裝

RabbitMQ好文

安裝RabbitMQ

Ubuntu

添加RabbitMQ源:html

sudo echo "deb http://www.rabbitmq.com/debian testing main" >> /etc/apt/sources.list

將RabbitMQ公鑰加入咱們的信任密鑰列表,避免一些關於unsigned packages的警告。java

wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
sudo apt-key add rabbitmq-signing-key-public.asc

更新軟件列表,安裝rabbitmq-servernode

apt-get update
apt-get install rabbitmq-server

rabbitmq的相關目錄:python

$ find / -name .erlang.cookie
/var/lib/rabbitmq/.erlang.cookie

執行apt-get update以後報錯:linux

W: GPG error: http://www.rabbitmq.com testing InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6B73A36E6026DFCA

使用apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6B73A36E6026DFCA解決git

啓動MQ:web

service rabbitmq-server start

發現經過ip:15672仍是沒法訪問,那麼,還須要進一步設置,啓用RabbitMQWeb管理插件:ubuntu

rabbitmq-plugins enable rabbitmq_management

而後就能夠經過瀏覽器訪問了,當使用guest/guest登錄時,報錯,User can only log in via localhostsegmentfault

解決辦法:centos

rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

添加用戶參考:

CentOS

yum -y install epel-release
yum -y update
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
rpm -Uvh rabbitmq-server-3.6.10-1.el7.noarch.rpm
systemctl start rabbitmq-server
systemctl enable rabbitmq-server
rabbitmq-plugins enable rabbitmq_management

where -U to update if package is already installed, -v for verbose output, -h to print hash output 坑1:

在執行systemctl start rabbitmq-server.service以後,報錯:Failed to start RabbitMQ broker:

緣由,在運行systemctl start rabbitmq-server.service以前,我先執行了rabbitmq-plugins enable rabbitmq_management,致使/etc/rabbitmq/下生成了enabled_plugins。解決啓動錯誤,先刪除該文件。

此外,啓動出錯時,還有可能由於防禦牆的緣由,能夠參考此篇文章關閉。

防火牆關閉解決辦法:

firewall-cmd --permanent --add-port=5672/tcp
firewall-cmd --reload
setsebool -P nis_enabled 1

或者粗暴點的辦法(不推薦)

systemctl stop firewalld
systemctl disable firewalld 
setenforce 0 (記得/etc/selinux/config也改爲 disable,不然重啓就不生效了)
```

坑2:

rabbitmq服務總算start成功了,可是執行`rabbitmq-plugins enable rabbitmq_management`仍是報錯:

```
[root@SHA1000154085 rabbitmq]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
  amqp_client
  cowlib
  cowboy
  rabbitmq_web_dispatch
  rabbitmq_management_agent
  rabbitmq_management
Applying plugin configuration to rabbit@SHA1000154085... failed.
Error: {cannot_read_enabled_plugins_file,"/etc/rabbitmq/enabled_plugins",
           eacces}
```

網上看到一篇文章,抱着絕望的心情執行了:

```
umask 0022; rabbitmq-plugins enable rabbitmq_management
```

居然OK了!!!

坑3:

報錯:`"Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only"`

解決辦法-[unable to start rabbitmq server on ubuntu 10.04](https://stackoverflow.com/questions/24610367/unable-to-start-rabbitmq-server-on-ubuntu-10-04):

```
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 600 /var/lib/rabbitmq/.erlang.cookie
```

看來`.erlang.cookie`的屬組也很關鍵,修改好以後是這樣的:
```
-rw-------   1 rabbitmq rabbitmq     20 Jun 14 14:31 .erlang.cookie
```

### 安裝參考

- [stackoverflow-How to install Install rabbitmq server on centos7](https://stackoverflow.com/questions/32327873/how-to-install-install-rabbitmq-server-on-centos7)
- [How to Install RabbitMQ Server on CentOS 7](https://www.howtoforge.com/tutorial/how-to-install-rabbitmq-server-on-centos-7/)
- [RabbitMQ 基礎](http://www.cnblogs.com/vincenshen/articles/6659589.html)
- [how-to-install-rabbitmq-on-centos-7](https://www.vultr.com/docs/how-to-install-rabbitmq-on-centos-7)
- [How to Install RabbitMQ on CentOS/RHEL 7/6 and Fedora](https://tecadmin.net/install-rabbitmq-on-centos/)

## RabbitMQ集羣

- [rabbitmq 集羣搭建](http://www.pandan.xyz/2017/02/11/rabbitmq%20%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA/)
- [Using RabbitMQ in Cluster](https://dzone.com/articles/rabbitmq-in-cluster)
- [CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集羣服務與使用](https://segmentfault.com/a/1190000010702020)
- [Rabbitmq集羣高可用測試](https://www.cnblogs.com/flat_peach/archive/2013/04/07/3004008.html)
- [RabbitMQ集羣和高可用配置的技巧](https://www.linuxprobe.com/rabbitmq-configuration.html)

### 修改hostname

臨時修改hostname:`hostname <new hostname>`

推薦永久修改的方式:

CentOS系
```
$vi /etc/sysconfig/network
HOSTNAME=yourhostname
```

Debian發行版的hostname的配置文件是`/etc/hostname`。

Ubuntu

```
vi /etc/hostname
```

還須要修改`hosts`:

```
$vi /etc/hosts
127.0.0.1   node2
127.0.0.1   localhost node2 localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
```
最後`reboot`重啓,輸入`hostname`查看是否生效。

參考:

- [CentOs6.5 修改主機名](http://www.ymq.io/2017/07/31/linux-localdomain/#3%E9%87%8D%E5%90%AF%E6%9C%8D%E5%8A%A1%E5%99%A8)
- [修改centos等linux的hostname-永久生效](https://blog.csdn.net/yangshangwei/article/details/52878530)

## 文件路徑

```
[root@SHA1000154085 rabbitmq]# find / -name rabbitmq-server

/usr/lib/ocf/resource.d/rabbitmq/rabbitmq-server
/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.10/sbin/rabbitmq-server
/usr/lib/rabbitmq/bin/rabbitmq-server
/usr/sbin/rabbitmq-server
/etc/logrotate.d/rabbitmq-server
```

## 重要方法

### factory.setAutomaticRecoveryEnabled()

```
//默認rabbitmq client是打開了自動recover鏈接的能力的(5.0版本的rabbitmq 默認是打開的)
factory.setAutomaticRecoveryEnabled(true);

ExecutorService es = Executors.newFixedThreadPool(20);
return factory.newConnection(es);
```

### channel.basicQos()
channel.basicQos(1); // accept only one unack-ed message at a time (see below)

### 參考-重要方法

- [rabbitmq channel參數詳解](https://www.cnblogs.com/piaolingzxh/p/5448927.html)
- [RabbitMQ指南(上)](http://www.importnew.com/24319.html)
相關文章
相關標籤/搜索