专栏首页Pythonistacentos7安装rabbitmq

centos7安装rabbitmq

RabbitMQ是部署最广泛的开源消息代理。

RabbitMQ在全球范围内在小型初创公司和大型企业中进行了超过35,000次RabbitMQ生产部署,是最受欢迎的开源消息代理。

RabbitMQ轻量级,易于在内部和云中部署。它支持多种消息传递协议。RabbitMQ可以部署在分布式和联合配置中,以满足高规模,高可用性要求。

RabbitMQ可在许多操作系统和云环境中运行,并为大多数流行语言提供各种开发人员工具。

RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统。它是由Erlang语言开发。

AMQP:Advanced Message Queue,高级消息队列协议。他是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。具体特点包括:<!--more-->

可靠性(Reliability):RabbitMQ使用一些机制来保证可靠性,如持久化、传输确认、发布确认。
灵活的路由(Flexible Routing):在消息进入队列之前,通过 Exchange 来路由消息的。
消息集群(Clustering):多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。
高可用(Highly Available Queues):队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
多种协议(Multi-protocol):RabbitMQ支持多种消息队列协议,比如STOMP、MQTT等。
多语言客户端(Many Clients):RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等。
管理界面(Management UI):RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。
跟踪机制(Tracing):如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。
插件机制(Plugin System):RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

概念

Broker:消息队列服务器的实体,是一个中间件应用,负责接收消息生产者的消息,然后将消息发送至消息接收者或其他的Braker
Exchange:消息交换机,是消息第一个到达的地方,消息通过它指定的路由规则,分发到不同的消息队列中去。
Queue:消息队列,消息通过发送和路由之后最终达到的地方,到达Queue的消息即进入逻辑上等待消费的状态。每个消息都会被发送到一个或多个队列。
Binding:绑定,它的作用就是把Exchange和Queue按照路由规则绑定起来,也就是Exchange和Queue之间的虚拟链接。
Routing Key:路由关键字,Exchange根据这个关键字进行消息投递。
Virtual host:虚拟主机,是对Broker的虚拟划分,将消费者、生产者和它们依赖的AMQP相关结构进行隔离,一般都是为了安全考虑。比如:我们可以在一个Broker中设置多个虚拟主机,对不同用户进行权限的分离。
Connection:连接。代表生产者、消费者、Broker之间进行通信的物理网络。
Channel:消息通道,用于连接生产者和消费者的逻辑结构。在客户端每个连接里,可建立多个Channel,每个Channel代表一个会话任务,通过Channel可以隔离同一个连接中的不同交互内容。
Producer:消息生产者。
Consumer:消息消费者。

消息队列的使用过程:

  1. 客户端连接到消息队列服务器,打开一个channel。
  2. 客户端声明一个exchange,并设置相关属性。
  3. 客户端声明一个queue,并设置相关属性。
  4. 客户端使用routing key,在exchange和queue之间建立好绑定关系。
  5. 客户端投递消息到exchange。

安装介绍

Erlang安装配置

前面说到RabbitMQ是由Erlang语言开发,所以需要先安装Erlang环境

最简化安装

配置好 yum仓库,epel源

yum install erlang

下载好后检测erlang

[root@lb01 yum.repos.d]# which erl
/usr/bin/erl

RabbitMQ安装

 最简化安装

yum install rabbitmq-server

检测是否安装

[root@lb01 yum.repos.d]# rabbitmq
rabbitmqctl       rabbitmq-plugins  rabbitmq-server

RabbitMQ服务命令

#启动服务
rabbitmq-server -detached 

#查看帮助
man rabbitmq-server
参数解释:
OPTIONS
       -detached    后台运行
           Start the server process in the background. Note that this will cause the pid
           not to be written to the pid file.

rabbitmqctl status #查看rabbitmq状态

#创建rabbitmq登录用户
添加用户
rabbitmqctl add_user [username] [password]
添加权限
rabbitmqctl set_permissions -p "/" [username] ".*" ".*" ".*"
修改用户角色
rabbitmqctl set_user_tags [username] administrator
 

配置rabbitmq网页插件

RabbitMQ网页管理的端口是15672,但是现在还不能访问,需要添加网页插件才能访问

rabbitmq-plugins enable rabbitmq_management

启动Rabbitmq服务

rabbitmq-server -detached

启动之后检查rabbitmq端口状态

[root@web01  /etc/yum.repos.d]$netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1217/master
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      12930/beam.smp
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN      10851/epmd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      953/sshd
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      12930/beam.smp #rabbitmq web界面端口
tcp6       0      0 ::1:25                  :::*                    LISTEN      1217/master
tcp6       0      0 :::5672                 :::*                    LISTEN      12930/beam.smp  
tcp6       0      0 :::3306                 :::*                    LISTEN      1039/mysqld
tcp6       0      0 :::4369                 :::*                    LISTEN      10851/epmd
tcp6       0      0 :::22                   :::*                    LISTEN      953/sshd
udp        0      0 127.0.0.1:323           0.0.0.0:*                           695/chronyd
udp6       0      0 ::1:323                 :::*                                695/chronyd

rabbitmq启动端口号解析

4369 (epmd), 25672 (Erlang distribution)

Epmd 是 Erlang Port Mapper Daemon 的缩写,在 Erlang 集群中相当于 dns 的作用,绑定在4369端口上。

5672, 5671 (AMQP 0-9-1 without and with TLS)

AMQP 是 Advanced Message Queuing Protocol 的缩写,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,专为面向消息的中间件设计。
基于此协议的客户端与消息中间件之间可以传递消息,并不受客户端/中间件不同产品、不同的开发语言等条件的限制。Erlang 中的实现有 RabbitMQ 等。

15672 (if management plugin is enabled)

通过 http://serverip:15672 访问 RabbitMQ 的 Web 管理界面,默认用户名密码都是 guest。(注意:RabbitMQ 3.0之前的版本默认端口是55672,下同)

61613, 61614 (if STOMP is enabled)

Stomp 是一个简单的消息文本协议,它的设计核心理念就是简单与可用性,官方文档,实践一下 Stomp 协议需要:

一个支持 stomp 消息协议的 messaging server (譬如activemq,rabbitmq);
一个终端(譬如linux shell);
一些基本命令与操作(譬如nc,telnet)
1883, 8883 (if MQTT is enabled)
MQTT 只是 IBM 推出的一个消息协议,基于 TCP/IP 的。两个 App 端发送和接收消息需要中间人,这个中间人就是消息服务器(比如ActiveMQ/RabbitMQ),三者通信协议就是 MQTT

创建root用户用于登录

[root@web01  /etc/yum.repos.d]$rabbitmqctl add_user root redhat
Creating user "root" ...
...done.

修改root用户角色权限

第二、添加root用户为administrator角色
[root@web01 /etc/yum.repos.d]$rabbitmqctl set_user_tags root administrator
Setting tags for user "root" to [administrator] ...
...done.

设置root用户权限,允许访问的vhost以及配置、写、读的权限

[root@web01  /etc/yum.repos.d]$rabbitmqctl set_permissions -p "/" root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "/" ...
...done.

检查vhost /  允许哪些用户访问

[root@web01  /etc/yum.repos.d]$rabbitmqctl list_permissions -p /
Listing permissions in vhost "/" ...
guest    .*    .*    .*
root    .*    .*    .*
...done.

登录rabbitmq web界面

Python操作RabbitMQ

import pika
#创建用户凭证,确认账号密码
credentials = pika.PlainCredentials('root', 'redhat')
#创建连接
connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.119.11', port=5672, virtual_host='/', credentials=credentials))
#创建频道连接
channel = connection.channel()
#打印频道信息,是否创建ok
print(channel)
#通过此频道可以创建队列

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 消息队列kafka

    在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。

    超蛋lhy
  • 消息队列与kafka

    在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。

    超蛋lhy
  • 消息队列rabbitmq/kafka

    消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。

    超蛋lhy
  • springboot + rabbitmq 用了消息确认机制,感觉掉坑里了

    最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI。不过,话说回来这的确是件好事,与其开那些没...

    程序员内点事
  • springboot + rabbitmq 用了消息确认机制,感觉掉坑里了

    这次我分享的是 springboot + rabbitmq 如何实现消息确认机制,以及在实际开发中的一点踩坑经验,其实整体的内容比较简单,有时候事情就是这么神奇...

    程序员内点事
  • 第四十一章: 基于SpringBoot & RabbitMQ完成DirectExchange分布式消息消费

    恒宇少年
  • 消息队列设计精要

    消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。 当今市面上...

    美团技术团队
  • 搞懂分布式技术20:消息队列因何而生

    本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

    Java技术江湖
  • Java 最常见的 208 道面试题:第十四模块答案

    ①. 跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。

    Java团长
  • 天天在用消息队列,却不知道为啥要用 MQ ,这就尴尬了

    一个用消息队列的人,不知道为啥用,有点尴尬。没有复习这点,很容易被问蒙,然后就开始胡扯了。

    芋道源码

扫码关注云+社区

领取腾讯云代金券