zoukankan      html  css  js  c++  java
  • Rabbitmq的安装与使用

    一、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。登录后的界面如下所示:

  • 相关阅读:
    函数指针
    动态内存
    char*和char[]的区别
    C语言基本数据类型大小
    html5新特性localStorage和sessionStorage
    Swoole实现h5版聊天室笔记
    php使用mysql之sql注入(功)
    Http协议工作特点和工作原理笔记
    原生js使用ajax
    php常用的几个预定义变量
  • 原文地址:https://www.cnblogs.com/weiwei-python/p/13810534.html
Copyright © 2011-2022 走看看