zoukankan      html  css  js  c++  java
  • RabbitMQ系列(二)--基础组件

    声明:对于RabbitMQ的学习基于某课网相关视频和《RabbitMQ实战指南》一书,后续关于RabbitMQ的博客都是基于二者

    一、什么是RabbitMQ

      RabbitMQ是开源代理和队列服务器,通过普通协议在不同的应用之间共享数据,使用Erlang编写(Erlang进行数据交换的性能很好,

    和原生socket一样好的延迟响应效果),基于AMQP协议

    二、AMQP

    AMQP高级消息队列协议:具有现代特征的二进制协议,和JMS有点像,模型如下:

    AMQP核心概念

      1、Server:Broker,接受client连接,实现AMQP实体服务

      2、Connection:应用程序和Broker的网络连接

      3、Channel:网络信道,读写都是在Channel中进行(NIO的概念),包括对MQ进行的一些操作(例如clear queue等)都是在Channel中进行,

    客户端可建立多个Channel,每个Channel代表一个会话任务

      4、Message:由properties(有消息优先级、延迟等特性)和Body(消息内容)组成

      5、Virtual host:用于消息隔离(类似Redis 16个db这种概念),最上层的消息路由,一个包含若干Exchange和Queue,同一个里面Exchange

    和Queue的名称不能存在相同的。

      6、Exchange:Routing and Filter

      7、Binding:把Exchange和Queue进行Binding

      8、Routing key:路由规则

      9、Queue:物理上存储消息

    三、哪些大厂在使用RabbitMQ,为什么?

    滴滴、美团、头条、去哪儿。。。。都再使用RabbitMQ

    原因:

      1、开源、性能优秀、能保证稳定性,提供可靠性消息投递模式confirm、返回模式return,和springAMQP完美整合、API丰富

      2、集群模式丰富,表达式配置,HA模式,镜像队列模式

      3、保证数据不丢失的前提下做到高可靠性、高可用性

    四、RabbitMQ基础组件

    1、Exchange: 

      如果不指定Exchange的话,RabbitMQ默认使用,(AMQP default)注意一下,需要将routing key等于queue name相同

    2、name、type:

      fanout(效率最好,不需要routing key,routing key如何设置都可以)、direct、topic(#一个或多个,*一个)、headers

    3、Auto Delete:

      当最后一个Binding到Exchange的Queue删除之后,自动删除该Exchange

    4、Binding:

      Exchange和Queue之间的连接关系,Exchange之间也可以Binding

    5、Queue:

      实际物理上存储消息的

    6、Durability:

      是否持久化,Durable:是,即使服务器重启,这个队列也不会消失,Transient:否

    7、Exclusive:

      这个queue只能由一个exchange监听restricted to this connection,使用场景:顺序消费

    8、Message:

      由properties(有消息优先级、延迟等特性)和Body(Payload消息内容)组成,还有content_type、content_encoding、priority

    correlation_id、reply_to、expiration、message_id等属性

    五、安装

    本人很早之前在centos安装过了,具体步骤都忘了,大家可以百度一下,有一大堆呢,比较推荐Docker安装,很方便

    需要注意:注意rabbitMQ和erlang版本的对应,而且服务器的host name不要瞎改,当初RabbitMQ一直启动报错,就是这个原因,搞了两天,真的

    蛋疼,先要确定erlang安装成功,然后按照RabbitMQ

    浏览器可视化工具:rabbitmq-plugins enable rabbitmq_management  用户名、密码:guest guest

  • 相关阅读:
    ORACLE学习记录
    Oracle拆分字符串函数
    spring3.2.5学习(二)——IoC注解配置
    spring3.2.5学习(一)——spring环境配置以及IOC简介
    使用SQL脚本将表字段生成实体类属性VO
    JAVA多线程笔试题
    初步接触LVS
    linux中shell,awk,sed截取字符串方法总结
    调用sort段错误问题
    开源软件许可协议简介
  • 原文地址:https://www.cnblogs.com/huigelaile/p/10906690.html
Copyright © 2011-2022 走看看