消息队列MQ

MQ消息队列

MQ面试目标

什么是MQ、为什么用MQ
结合实际项目讲自己用过的案例
rabbitmq/rocketmq/activemq/kafka什么区别,分别适用什么场景,怎么结合自己的业务去技术选型

MQ学习笔记

消息队列MQ

ActiveMQ在成熟度比较优秀,但是它的性能方面比较欠缺,所以在吞吐量不太高的中小型企业比较受欢欢迎;

Kafka追求高吞吐量,一般应用在大数据,一开始目的用于日志收集和传输,它不支持事务、不追求消息传递的可靠性,所以根据业务需求自行判断是否合适;

RocketMQ纯java开发,起源kafka,并不是复制kafka,基于kafka的缺点方面做了优化,比如可靠性方面,阿里对它的开源版本不支持事务,只有付费云产品才支持事务,它在阿里众多业务场景下经过不断的优化得到了逐步的完善;

RabbitMQ是Erlang语言开发的开源消息队列,基于AMQP协议实现,AMQP协议的特点的可靠性、安全性比较好,基于它的性能和可靠性以及开源社区活跃的结合考量,得到了众多企业的青睐。

AMQP和JMS的本质差别:JMS是基于API层面的限定,而AMQP是定义网络交换的数据格式

消息队列MQ

消息队列MQ

虚拟主机的作用:类似数据库中的库概念,同一个rabbitmq服务端下可以创建多个虚拟主机,便于供不同场景或不同项目共用同一服务端

提供rabbitmq的连接信息中包括了连接的用户账号和密码,而在服务端可以通过命令方式或者web管理界面中对用户的权限和虚拟主机进行管理,这样就便于程序知道连接至rabbitmq后从哪个虚拟主机中生产和消费消息

据了解可以省略交换机的模式,直接将消息放置于队列queue中

创建消费者demo代码示例(添加AMQP客户端依赖、服务端的虚拟主机/用户的创建/用户权限的设置、代码连接服务端、发布消息):

https://www.bilibili.com/video/BV1dE411K7MG?p=5&spm_id_from=pageDriver

官方示例的几种消费模型

https://www.rabbitmq.com/getstarted.html

消息队列MQ

消息队列MQ

  • work queues:没有交换机
  • 订阅模式:fanout,有交换机,所有消费者无条件/无过滤的接受广播
  • routing:direct,有交换机,队列绑定路由key,在交换机中根据路由key获取指定消息
  • topic:基于direct的功能,可以使用通配符,简化过滤规则

消息队列MQ

集群

主从复制集群:不可靠,从节点只能在队列看到队列信息,无法正常使用队列信息,如果主节点宕机,整个系统不可用

镜像集群:实际上就是rabbitmq提供的策略模式,基于主从设置策略后达到自动/手动同步,实现高可用

学习MQ疑问

怎么改端口?(默认服务端口5672/默认web管理界面端口15672/集群的端口25672)

上一篇:Latke持久层-新增add方法解读


下一篇:过滤器中注入spring管理的对象