JavaJava 杂谈程序员

RabbitMQ实战-基础概念

2019-06-29  本文已影响5人  JavaEdge

1 为什么是你? RabbitMQ

RabbitMQ是一个开源的消息代理和队列服务器,通过普通协议在完全不同的应用之间共享数据,使用Erlang语言编写,并且基于AMQP协议.

1.1 大厂们共同的抉择

1.2 得天独厚的强势

2 高性能之源

3 AMQP协议

4 协议模型

协议模型

5 AMQP核心概念

6 RabbitMQ整体架构与消息流转

image
image

7 安装

7.1 本节食用指南

7.2 下载及安装

7.2.1 Ubuntu环境

Linux环境参数 下载页
image
image
image
image
image
image
image
ps -ef|grep rabbit 查看rabbitmq的启动情况

7.2.2 CentOS7.3

对于初学者,推荐使用一键式的RPM安装方式

由于笔者使用3.6.5 版本.查看对应 erlang

image

配置文件

7.2.3 macOS

  // 更新brew资源
  brew update
  // 执行安装
  brew install rabbitmq

MQ的安装目录在 /usr/local/Cellar/rabbitmq

 // 切换到MQ目录,注意你的安装版本可能不是3.7.15
   cd /usr/local/Cellar/rabbitmq/3.7.15/
   // 启用rabbitmq management插件
   sudo sbin/rabbitmq-plugins enable rabbitmq_management
 sudo vi /etc/profile
 //加入以下两行
 export RABBIT_HOME=/usr/local/Cellar/rabbitmq/3.7.4
 export PATH=$PATH:$RABBIT_HOME/sbin
 // 立即生效
 source /etc/profile
  // 后台启动
  rabbitmq-server -detached  
  // 查看状态
  rabbitmqctl status 
  // 访问可视化监控插件的界面
  // 浏览器内输入 http://localhost:15672,默认的用户名密码都是guest,登录后可以在Admin那一列菜单内添加自己的用户
  rabbitmqctl stop 关闭

8 基本使用

8.1 常用命令

rabbitmq-server start &
rabbitmqctl stop_ app
rabbitmq-plugins enable rabbitmq_ management

8.2 重启操作

image
image
image
启动成功

9 quickstart - 消息的生产与消费

9.1 基本构建缺一不可

9.2 实操演示

10 命令行与管控台常规操作

10.1 常用命令行

实操

image

10.2 管控台的管理

13 Exchange交换机

Exchange:接收消息,并根据路由键转发消息所绑定的队列

image

蓝色 - Send Message:把消息投递到交换机,由路由键路由到指定的队列

13.1 交换机属性

除交换机类型外,在声明交换机时还可以附带许多其他的属性,其中最重要的几个分别是:

13.2 交换机类型

交换机主要包括如下4种类型:

Direct exchange(直连交换机)
Fanout exchange(扇型交换机)
Topic exchange(主题交换机)
Headers exchange(头交换机)
另外RabbitMQ默认定义一些交换机:

默认交换机
amq.* exchanges
还有一类特殊的交换机:Dead Letter Exchange(死信交换机)

13.2.1 Direct Exchange

所有发送到DE的消息被转发到RouteKey中指定的Queue

注意: Direct模式可以使用RabbitMQ自带的Exchange: default Exchange,所以不需要将Exchange进行任何绑定(binding)操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则该消息会被抛弃.

13.2.2 Direct Exchange原理示意图

image

13.2.3 Direct Exchange实操演示

注意路由key保持一致!,分别启动


image image
image
image

13.2.2 Topic exchange

尽管使用直接交换改进了我们的系统,它仍然有局限性 - 不能做基于多个标准的路由.

在我们的日志系统中,我们可能不仅要根据严重性订阅日志,还要根据发出日志的源来订阅日志。你可能从syslog unix工具中了解这个概念,它根据严重性(info / warn / crit ...)和facility(auth / cron / kern ...)来路由日志。

这会给我们很多灵活性 - 我们可能想要监听来自'cron'的关键错误以及来自'kern'的所有日志。

为了在我们的日志记录系统中实现这一点,我们需要了解更复杂的主题交换机.

13.2.2.1 实例1

image

在这个例子中,我们将发送所有描述动物的消息。消息将与包含三个单词(两个点)的routing key一起发送.
routing key中的第一个单词描述速度,第二颜色,第三是物种:“<speed>。<color>。<species>”。

我们创建了三个绑定:Q1绑定了绑定键“* .orange.”,Q2绑定了“.*.rabbit”和“lazy.#”

这些绑定可以总结为:

routing key设置为“quick.orange.rabbit”的消息将传递到两个队列。消息“lazy.orange.elephant”也将同时发送给他们.
另一方面

如果我们违背我们的约定并发送带有一个或四个单词的消息,例如“orange” or “quick.orange.male.rabbit”,会发生什么?好吧,这些消息将不会匹配任何绑定,因此将丢失.

另一方面,“lazy.orange.male.rabbit”,虽然它有四个单词,也会匹配最后一个绑定,并将被传递到第二个队列。

实例图

image

实操演示

小结

主题交换机功能强大,可以像其他交换机一样运行。
当队列绑定“#”(哈希)绑定key时 - 它将接收所有消息,而不管routing key - 就像在fanout交换机一样
当特殊字符“*”(星号)和“#”(哈希)未在绑定中使用时,主题交换机的行为就像直接交换机一样。

13.2.3 Fanout Exchange

实操演示

14 绑定(Binding)

15 Queue-消息队列

16 Message-消息

16.1 常用属性

delivery mode、headers (自定义属性)
content_ type. content_ encoding. priority
correlation id. reply to

expiration - 过期时间

这里就牵涉到RabbitMQ的TTL机制

message_ id
timestamp. type. user id. app_ id. cluster id

实操演示

17 总结

首先讲解互联网大厂为什么选择RabbitMQ? RabbitMQ的高性能之道是如何做到的?什么是AMPQ高级协议?AMPQ核心概念是什么?RabbitMQ整体架构模型是什么样子的?RabbitMQ消息是如何流转的?RabbitMQ安装与使用命令行与管控台,RabbitMQ消息生产与消费,RabbitMQ交换机详解,RabbitMQ队列、绑定、虚拟主机、消息等...
通过本文的学习,希望大家对RabbitMQ有一个整体的感知!

参考

RabbitMQ官网
mac + RabbitMQ 安装

上一篇下一篇

猜你喜欢

热点阅读