一、Rabbitmq的介绍

       Rabbitmq是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如,Python、Ruby、php等语言。支持ajax,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。     

       这里需要说明的是: AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布订阅)、可靠性、安全。

       通常我们谈队列服务,会有三个概念:发消息者、队列、收消息者,Rabbitmq在这个基本概念上多做了一层抽象,在发消息者和队列之间,加入了消息交换机(Exchange)。这样发消息和队列就没有直接联系,转而变成发消息者把消息给消息交换机,交换器根据调度策略再把消息给消息交换机,消息交换机根据调度策略再把消息再给队列。

         

    上图中,左侧P代表生产者,也就是往Rabbitmq发消息的程序;中间是Rabbitmq,其中包括交换机和队列;右侧C代表消费者,也就是从Rabbitmq拿消息的程序。

     五个概念:

1)虚拟主机:一个虚拟主机持有一组消息交换机、队列和绑定。在Rabbitmq中,用户只能在虚拟主机的粒度进行权限控制。因此,如果需要禁止A组访问B组的消息交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。每个Rabbitmq服务器都有一个默认的虚拟主机/

2)消息:消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)

3)绑定:也就是交换机需要和队列向绑定,如上图所示,是多对多的关系。用于消息队列和交换器之间的互联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表

4)信道:多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的tcp连接内地虚拟连接。AMQP命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过通道完成。因为对于操作系统来说建立和销毁tcp都死非常昂贵的开销,所以引入了信道的概念,以复用一条tcp连接。

5)交换器(Exchange):Exchange用于转发消息,但它不会做存储,如果没有Quene bind到Exchange的话,它会直接丢弃掉Producer发送过来的消息。消息到交换机的时候,交换机会根据路由键转发到对应的队列中。

交换器的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout

Direct:direct 类型的行为是”先匹配, 再投送”. 即在绑定时设定一个 routing_key, 消息的routing_key 匹配时, 才会被交换器投送到绑定的队列中去.

Topic:按规则转发消息(最灵活)

Headers:设置header attribute参数类型的交换机

Fanout:转发消息到所有绑定队列

二、Rabbitmq服务器的搭建

1、安装Erlang

# yum install erlang

2、安装Rabbitmq-server

#yum install  rabbitmq-server

3、配置Rabbitmq-server

1)将rabbitmq的rabbitmq.config.example文件内容替换/etc/rabbitmq/rabbitmq.config

2)编辑rabbitmq配置文件,开启远程访问

     将配置文件中"%% {loopback_users, []},",这一行的逗号去掉

3)开启 Web 界面管理

    #rabbitmq-plugins enable rabbitmq_management

4)重启 RabbitMQ 服务

    #systemctl restart rabbitmq-server

5)开放防火墙端口

   #iptables -I INPUT -p tcp -m tcp --dport 15672 -j ACCEPT

   #iptables -I INPUT -p tcp -m tcp --dport 5672 -j ACCEPT

   #service iptables save

   #service iptables restart

4、浏览器访问rabbitmq web界面

   浏览器上输入地址:rabbitmq服务器地址:15672。默认管理员账号:guest,密码:guest。登录后的界面如下所示:

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐