RabbitMQ是一个消息中间件,作用是用来将服务之间解耦,提高容错率,想象一下:如果A服务出现问题,那么依赖它的B服务就会直接瘫痪,而如果我们使用消息队列之后,B服务将消息丢到队列以后,就算是成功了,接下来只需要等待A执行就好
2023/11/30
1.常用的其他消息中间件
- ActiveMQ,性能不是很好,因此在高并发的场景下,直接被pass掉了。它的Api很完善,在中小型互联网公司可以去使用。
- kafka,主要强调高性能,如果对业务需要可靠性消息的投递的时候。那么就不能够选择kafka了。但是如果做一些日志收集呢,kafka还是很好的。因为kafka的性能是十分好的。
- RocketMQ,它的特点非常好。它高性能、满足可靠性、分布式事物、支持水平扩展、上亿级别的消息堆积、主从之间的切换等等。MQ的所有优点它基本都满足。但是它最大的缺点:商业版收费。因此它有许多功能是不对外提供的。
- RabbitMQ,
在高可用上,它使用的是镜像集群模式,可以保证高可用。在消息可靠性上,它是可以保证数据不丢失的,这也是它的一大优点。同时它也支持一些消息中间件的高级功能,如:消息重试、死信队列等。但是,它的开发语言是
erlang
2.RabbitMQ的安装与配置
首先安装语言erlang,到官方下载erlang我下载的是最新版本26.1.2
然后到RabbitMQ下载页面下载与之对应的版本,我也下载的最新3.12.10
Release RabbitMQ 3.12.10 · rabbitmq/rabbitmq-server (github.com)
安装完了erlang之间配一下环境变量
安装完了rabbitmq之后需要执行两个命令
详情参考RabbitMQ详解,用心看完这一篇就够了【重点】-CSDN博客
1.rabbitmq-plugins enable rabbitmq_management
2.rabbitmqctl status
这里第二个命令是会报错,解决办法如下
1.替换文件
2.用户权限
详情参考【Spring常见错误】Rabbitmq 常见问题_suggestion: start the node-CSDN博客
3.RabbitMQ的工作原理
生产者-消费者
生产者发送请求到中间件,中间件转发消息到消费者
生产者发送带有路由的请求,由交换机决定发送到哪个消息队列
4.三种交换机类型
1. Direct Exchange(直连交换机)
- 工作方式:在这种类型的交换机中,消息是基于消息携带的路由键(routing key)发送的。您需要做的是将队列绑定到交换机,并指定一个路由键。
- 用例:如果您有一个路由键为
"error"
的消息,那么它只会被发送到那些绑定了相同路由键"error"
的队列。
2. Fanout Exchange(扇型交换机)
- 工作方式:这种类型的交换机会将消息发送到所有绑定到它的队列,忽略路由键。也就是说,一旦消息发送到扇型交换机,它会被分发到所有绑定的队列。
- 用例:如果您希望广播某个消息给多个队列,可以使用扇型交换机。例如,用于系统中的日志记录,每个绑定的队列都可以接收到所有日志消息。
3. Topic Exchange(主题交换机)
- 工作方式:主题交换机更为灵活,它允许使用通配符绑定路由键。队列通过指定一个模式来绑定到交换机。交换机根据消息的路由键,将消息路由到一个或多个匹配该模式的队列。
- 用例:例如,您可以有一个路由键为
"user.created"
的消息,它可以被路由到所有绑定了"user.*"
或"*.created"
的队列。
比较
- Direct Exchange 更适合点对点的精确路由。
- Fanout Exchange 用于广播消息,当你需要将同一消息发送到多个队列时。
- Topic Exchange 提供了基于模式匹配的灵活路由机制,非常适合多种路由场景。