RabbitMQ是什么?

发布于:2024-10-17 ⋅ 阅读:(12) ⋅ 点赞:(0)

了解MQ

消息队列(MQ)是一种用于异步通信的通信机制,通过将消息存储在队列中以实现系统之间的解耦。MQ 的主要功能是异步传递消息,允许发送者将消息发送到队列中,而接收者可以在适当的时候从队列中读取消息。MQ 常用于分布式系统中,以提高系统的可靠性和可扩展性。

MQ的特性

  1. 异步通信:发送者不需要等待接收者处理完消息,可以继续执行其他任务。
  2. 解耦:发送者和接收者之间不直接通信,降低了它们之间的耦合度。
  3. 持久性:大多数消息队列可以持久化消息,即使系统崩溃或重启,消息仍然可以被保存。
  4. 流量控制:消息队列可以帮助处理突发流量,缓解系统压力。
  5. 可靠性:通过确认机制确保消息传递的可靠性。

同步调用与异步调用的区别

04011b5d53e14584a594f17ca25d9df1.png

 

MQ初体验——收发消息

1.基本概念

生产者(Producer):负责发送消息到队列的应用程序。

消费者(Consumer):负责从队列中接收并处理消息的应用程序。

消息:生产者发送到队列的数据,通常包含了业务信息。

队列:存储消息的缓冲区,消费者从中获取消息。

2. 消息收发的基本流程

  1. 生产者发送消息

    生产者通过MQ客户端将消息发送到消息队列。
  2. 消息存储

    消息被存储在消息队列中,等待被消费者消费。
  3. 消费者接收消息

    消费者从队列中获取消息并进行处理。
  4. 确认处理

    消费者处理完消息后,通常会向MQ确认消息已被成功处理,以便MQ删除该消息。

3.交换机

c3beeb742b0841b5a3c15af3f26100d6.png

控制台模拟生产者发送的消息

870391d09c9945caa8ff1a420f7f5998.png

发送到交换机的消息,只会路由到与其绑定的队列,因此仅仅创建队列是不够的,我们还需要将其与交换机绑定。

c10edd5607be43938b7f1dca9520813f.png

4.队列

1ba4cd976bf54a3faca630d531be7929.png

点击队列名称,进入详情页,查看队列详情,这次我们点击get message:

ec03f064331f427c860c0502d6c4035b.png

MQ初体验——数据隔离

1.数据隔离的意义

数据隔离是指在系统中不同模块或服务之间保持数据的独立性和不互相干扰。在微服务架构和分布式系统中,消息队列(MQ)是实现数据隔离的一种有效手段。通过使用MQ,可以确保不同服务在处理消息时不直接依赖彼此,从而提升系统的可维护性、可扩展性和可靠性。

新建用户,并为用户创建虚拟主机,测试不同虚拟主机之间的数据隔离现象

f9b3d7ccbee342b6b06b2fbeca20f3ef.png

设置成功后登出并用刚刚创建的用户登录

4d28507c8b0b4b35a9ad5474af655d4f.png

访问队列消息提示被拒绝

7323a777aa60410882def40beddadeba.png

数据隔离的原理

主要指不同的生产者和消费者在处理消息时,能够确保它们之间的数据不会互相干扰。这种隔离机制通常由虚拟主机(Virtual Host, vHost)、队列(Queue)以及其他隔离策略来实现。

虚拟主机(vHost)

虚拟主机是消息队列系统中的一个逻辑分区,用于将消息、队列、交换机等资源进行隔离。每个虚拟主机可以看作是一个独立的命名空间,允许多个不同的应用或租户在同一个 MQ 实例中进行操作,但它们的资源相互独立,不会产生冲突。

数据隔离的原理:通过使用多个虚拟主机,可以为不同的应用、服务或租户提供独立的队列、交换机和绑定规则。这意味着即使是在同一个 MQ 实例中,不同虚拟主机下的消息生产和消费是互不干扰的。

场景:比如一个大型系统可以为不同的模块创建不同的虚拟主机,来管理不同的消息队列。每个模块的消息只能在其对应的虚拟主机中处理,保证数据的隔离和安全。