您的位置:首页 > 其它

RabbitMQ实战:高效部署分布式消息队列(读书笔记)

2016-02-03 21:10 274 查看

RabbitMQ实战:高效部署分布式消息队列

目录

1
历史简介
2
理解消息通信
3
运行和管理Rabbit
4
编码与模式
5
集群及处理失败
6
故障恢复
7
warren和Shovel:故障转移和复制
8
从Web端管理RabbitMQ
9
使用REST API控制Rabbit
10
监控
11
提升性能,保障安全
12
聪明的Rabbit:扩展RabbitMQ
13
附录

历史简介

理解消息通信

信道(channel)
接受者确认之后消息就会从队列中删除(anycast任播?)
AMQP交换器(exchange)和绑定(bind):

4种类型的交换器:direct(如果key匹配)、fanout(广播)、topic(汇聚,使用*通配符)、headers

队列绑定到交换器

多租户:vhost(感觉RabbitMQ完全可以理解为一个HTTP 2.0 Web服务器啊?)
持久化

durable=true;投递模式选项=2(令人震惊!这什么技术书???)
性能不佳?靠
?AMQP事务

更好的:‘发送方确认模式’(信道设为confirm模式)

Python客户端演示:

import pika
conn_params = ...
conn_broker = pika.BlockingConnection(conn_params)
chan = conn_broker.channel()
chan.exchange_decalre(exachange="name-a", type="direct", passive=False, durable=True, auto_delete=False) #注意名字需要保证唯一性
chan.queue_declcare(queue="q-1")
chan.queue_bind(queue="q-1", exachange="name-a", routing_key="k") #靠
...
chan.basic_consume(msg_consumer, queue="q-1", consumer_tag=...)
chan.start_consuming()

当信道为confirm模式时,发送的每条消息都会返回唯一ID(有点类似于数据库插入记录时的生成ID??)

消息ID需要由发送者自己维护?靠

运行和管理Rabbit

rabbitmq.config:这个配置文件本身就是Erlang代码,还挺时髦的~
Mnesia是一个文档型数据库???

Mnesia会基于主机名创建数据库名称?wtf

php-amqplib
疑难解答

Erlang cookie
badrpc、nodedown

编码与模式

发后即忘

告警日志
图片缩略图(fanout)

嗯,php代码是在后台执行的吗?

用RabbitMQ实现RPC

其实就是借用了前者的消息序列化代码吧,脑残

私有队列和发送确认

怎么保证只有发送者收到确认(机制?),即使指定了reply_to字段和exclusive参数的情况下

我觉得用pipe-filter-lambda的术语来描述分布式消息队列通信似乎更容易理解一点?

集群及处理失败

内部集群架构

4种类型的内部元数据:队列、交换器、bind、vhost

分布式交换器(只不过是一张查询表)

routing_key让我想起了SDN中的内部路由IP地址。。。

内存节点 or 磁盘节点

元数据更新必须写到至少一个磁盘节点,内存节点可以认为是磁盘读快照,不能被更新(Me:事实上也是可以的,比如Spark这类基于内存的分布式流处理框架)

镜像队列(master-slave)和保留消息

声明镜像队列:传入一个x-ha-policy参数到queue.declare调用中(手工指定master?Fk)

故障恢复

为Rabbit做负载均衡

HAProxy(不就是一个TCP代理嘛)

warren和Shovel:故障转移和复制

warren:主/备份(无共享)
Shovel:自定义一个RabbitMQ上的队列和另一个RabbitMQ上的交换器的复制关系(异步复制,让我想起了网络传输协议中的ATM。。。)

从Web端管理RabbitMQ

超越rabbitmqctl:Management插件

CLI

使用REST API控制Rabbit

REST API一般基于HTTP,有连接开销,一般仅用于‘控制’吗?

监控

Nagios

提升性能,保障安全

消息持久化:delivery-mode=2
topic:11秒时间,针对2000个模式,匹配100000个topic(每秒10w个消息投递?)
Erlang进程计数:上限2^20
SSL连接

聪明的Rabbit:扩展RabbitMQ

STOMP:基于文本的协议(可与ActiveMQ一起工作)
LDAP认证
自定义交换器:Riak

靠,这里完全就是Erlang编程了

附录

node-amqp、Rabbit.js

这书太弱了,Fk
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: