一、介绍AMQP协定
个性:
1:分布式事务反对。
2:音讯的长久化反对。
3:高性能和高牢靠的音讯解决劣势。
散发策略:
1: 轮询散发
2: 偏心散发
AMQP音讯路由必须的三局部:交换器、路由、绑定
消费者从队列中接管音讯:
- 通过AMQP的basic.consume 命令将信道置为接管模式,直到勾销队列订阅为止。可能继续接管音讯
- 通过AMQP的basic.get命令实现向队列获取一条音讯
留神:
- RabbitMq基于AMQP协定
对个消费者共用同一队列 ,音讯的生产流程循环生产,cosumerA,cosumerB。
1、 messageA 达到队列先 给conusumerA ,在consumerA中确认了接管了messageA音讯,RabbiMQ将messageA从队列中删除
2、message发送给consumerB ranhou....问题一:consumerA没有确认音讯会怎么样?
messageA会发送给下一个消费者,从而保障音讯被生产,如果consumerA没有确认音讯,队列将不会发送音讯给消费者A,能够利用这点来管制生产时长。
问题二:应用什么形式回绝解决该条音讯?
1、把消费者从rabbiMq断开(会减少对RabbitMQ的负荷) 2、RabbitMq2.0.0及以上版本能够应用AMQP的basic.reject命令。把reject命令的requeue 值设为true则将音讯发送到下一个message,false则是移除该音讯。
名词介绍:
- 生产者
- 有效载荷(理论传输数据),
- 标签(形容数据,指定谁能够复制音讯)
- 队列
- 消费者
- 信道:当TCp连贯建设会创立AMQP信道,AMQP的命令通过信道发送,每条信道被指定惟一id。
二、交换器和绑定
交换器通过路由键来散发音讯到不同队列:一共有4中类型交换器 direct、famous、topic、headers(headers交换器容许你匹配Amqp音讯的header而非路由键)
- direct交换器:如果路由键匹配的话,音讯就被投递到对应的队列
服务器必须实现direct类型交换器,蕴含一个空白字符串的默认交换器。队列的名称就是路由键
- famous 交换器:会将音讯匹配到所有附加在此交换器上的队列
3.topic交换器:通过通配符匹配音讯,使得不同源头的音讯达到同一队列
三、虚拟主机
每一个vhost实质上是一个mini版的RabbitMq服务器,领有本人的队列、交换器和绑定。挡在Rabbitmq集群中创立了一个mq则整个集群中都会创立这个vhost。
4、音讯长久化和策略
- 长久化的形式: 1、把它 的投递模式(delicery mode)选项设置为2 2、发不到长久化的交换器 3、达到长久化的队列。(服务器会将持久性的音讯写入到持久性日志中)
5、应用Rabbitmq的大抵流程
- 连贯Rabbitmq
- 获取信道
- 申明交换器
- 申明队列
- 队列和交换器绑定
- 生产音讯
- 敞开信道
- 敞开连贯
RabbitMq是运行在Erlang上的
1、启动结点 ./sbin/rabbitmq -server
2、敞开结点 ./sbin/rabbitmqctl stop 只敞开rabbitmq ./rabbitmqctl stop_app
3、Rabbitmq日志:LOG_BASE = /var/log/rabbitmq
会创立两个日志文件RABBITMQ_NODENAME-sasl.log 和RABBITMQ_NODENAME.log
文章参考书籍:《Rabbimq实战 高效部署分布式音讯队列》