安装rabbitmq
本机:
http://erlang.org.download/otp_win64_21.3.exe
一直next
https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/:rabbitmq-server-3.7.14.exe
全选,next
进入RabbitMQ安装目录下的sbin目录
rabbitmq-plugins enable rabbitmq_management
http://localhost:15672访问
guest guest
docker:
# 下载镜像
docker pull rabbitmq
# 启动镜像
docker run --name rabbitmq -p 15672:15672 -p 5672:5672 -d rabbitmq:latest
# 进去镜像实例中安装管理界面
docker exec -it rabbitmq bash
# 镜像实例中输入命令安装管理台
rabbitmq-plugins enable rabbitmq_management
# 访问localhost:15672,输入用户名密码:guest/guest登录即可
docker start
#开机自动启动
docker update --restart=always id
MQ引言
消息队列,通过典型的生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的浸入,轻松的实现系统间的解耦。别名消息中间件,通过利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
不同MQ特点
Activemq
Apache,完全支持JMS规范的消息中间件,丰富的API。
kafka
Apache开源的发布-订阅消息系统,主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的是用于日志的手机和传输。不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。
Rocketmq
阿里开源,基于java开发,高吞吐量、高可用性、适合大规模分布式系统用用的特点。它对消息的可靠传输及事务性做了优化,目前在阿里巴巴中被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发场景。
Rabbitmq
基于Erlang语言,AMQP协议来实现。AMQP的主要特点是面向消息、队列、路由、可靠性、安全。AMQP协议更多用在企业系统内对数据的一致性、稳定性和可靠性要求很高的场景,对性能和高吞吐量的要求还在其次。
Rabbitmq比kafka可靠,Kafka更适合IO高吞吐的处理,一般应用于大数据的日志处理等。
AMQP概论
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议。消费者收到的每一条消息都必须进行确认(自动确认和自行确认)。AMQP是一种链接协议,这是和JMS的本质区别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式,这使得实现了AMQP的provider天然性就是跨平台的。
包括的要素:
- 生产者、消费者、消息
- 信道(每一个线程都对应一个信道,多个线程可共享一个tcp/ip)
- 交换器(每一个队列都需要绑定交换器来路由消息)、队列、绑定、路由键(生产者的消息根据路由键发送到对应队列,一个队列可以绑定多个key)
交换器类型
Direct Exchange
交换器根据路由键key(全一致)分配到对应的队列
Fanout Exchange
没有路由键key,消息直接分配到所有的队列
Topic Exchange
生产者发消息,携带路由key,根据分隔符“.”识别到对应的队列。*指匹配单个,#指匹配所有。
队列事先设置好范围,用*,#表示,可识别路由key。
如下图,usa.#指可以接收routing key为usa开头的所有key,比如:usa.xx.xxx
usa.*则只能接收routing key为usa.xx的key。
虚拟主机headers
虚拟主机:rabbitmq中细分成几个小的rabbitmq。可分别给多个系统使用。
类似数据库,整个rabbitmq就是mysql,一个虚拟机就是库。
Rabbitmq管理页面
创建交换机:
Durable指持久化,存放到磁盘。
默认自带6个交换器
创建队列:
创建用户:
自带guest,guest。
点击virtual hosts,创建虚拟主机:
名称最好/开头
点击用户,绑定该用户使用虚拟机的权限:
5672端口是客户端的访问端口;
25672是集群搭建访问的端口;
15672是访问管理页面的端口。