RabbitMQ学习笔记

RabbitMQ

RabbitMQ是一个开源的消息中间件,可以通过普通协议在不同的应用之间传递数据(跨语言),通过Erlang语言编写,基于AMQP协议。

AMQP协议

AMQP全称:Advanced Message Queuing Protocol 高级消息队列协议,应用层协议。

早期的消息中间件没有统一的标准,各自有自己的一套体系,各自的API,各自的协议。相互不能通信,Java方面针对此问题提出了JMS规范协议,提供了统一的Java接口,此时Java应用程序只需要选择合适的驱动即可,JMS会处理好其它部分。但仅仅在Java层面使用,AMQP,更好的消息通信解决方案,更上层次的封装,从一开始就称为标准可以实现跨语言通信。

AMQP核心概念

Server:又称Broker,接收客户端的连接,实现AMQP实体服务。

Connection:连接,应用程序连接RabbitMQ服务器时所用的连接,TCP长连接。

Channel:信道,通过Conection建立的TCP连接内的虚拟连接,AMQP命令通过信道传到服务器。加强版的传输层,一条TCP连接,多个独立的信道并行。

在这里插入图片描述

生产者:消息的创建者,将消息发送到RabbitMQ

消费者:消费消息的一方

**消息:**包含有效载荷和标签,有效载荷指要传输的数据,可以是任何内容 如json数组,标签描述了有效载荷,并且rabbitmq用它来决定谁获得消息,消费者只能拿到有效载荷,并不知道生产者是谁。

交换器、队列、绑定、路由键:队列通过路由键(Rounting key)绑定到交换器,生产者发布消息到交换器,交换器根据自身规则进行转发至对应的消息队列,然后订阅这个队列的消费者进行消费。

在这里插入图片描述

一个交换器可以绑定多个队列,一个队列也可以绑定多个交换器。

交换器的种类

服务器会根据路由键将消息从交换器路由到队列,但它是如何处理投递到多个队列的情况呢?协议中一共定义了四种类型的交换器:

  • direct:路由键完全匹配,消息被投递到对应的队列,每个服务器的实现都必须有一个direct交换器,包含一个空白字符串名称的默认交换器

在这里插入图片描述

  • fanout:交换器会将消息广播到所有绑定在该交换器的队列中。

在这里插入图片描述

  • topic:通过通配符可以使得来自不同源头的消息进入同一个队列,通配符有两个,*代表匹配一个单词。#代表匹配零个或者多个单词。单词与单词之间用 . 隔开。在BingdingKey中使用通配符,然后RountingKey就可以根据通配符进行通配。

在这里插入图片描述

  • headers:headers类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送消息内容中的headers属性进行匹配。headers类型的交换器性能差,不实用,基本上不会使用。

虚拟主机

虚拟消息服务器,vhost,本质上就是一个mini版的mq服务器,有自己的队列、交换器和绑定,最重要的,自己的权限机制。Vhost提供了逻辑上的分离,可以将众多客户端进行区分,又可以避免队列和交换器的命名冲突。Vhost必须在连接时指定,rabbitmq包含缺省vhost:“/”,通过缺省用户和口令guest进行访问。

rabbitmq里创建用户,必须要被指派给至少一个,并且只能访问被指派内的队列、交换器和绑定。必须通过的管理控制工具创建。

不同的应用跑在不同的vhost中,实现业务隔离。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值