RabbitMQ学习

 当不同的微服务之间存在调用时,比如支付业务必须等待扣除余额业务的结果,然后再调用其他业务,这里扣除余额必须同步,其他的可以异步,同步好处是时效性好,但是性能很差

使用同步会导致一个服务内部耦合性太高(使用Feign向其他微服务发请求) 不符合开闭原则

而使用异步则可以提高性能和拓展性,即使时效性不那么好。

 

 

 

 

在异步调用中,Broker(代理)是一个中间件,它连接了消息的生产者和消费者,用于分发消息并确保消息到达目标。当一个应用程序需要向另一个应用程序发送一个请求或通知时,它会将消息发送到 Broker 中,并且 Broker 会确保将该消息传递给正确的接收者。

在异步调用中,Broker 通常被用作消息队列,例如 Apache Kafka、RabbitMQ、ActiveMQ 等。这些消息队列是高效的分布式系统,能够处理大量的消息传输,并且提供了可靠性和可伸缩性。

具体来说,在异步调用中,当一个应用程序发送一个请求或通知时,它会将消息发送到 Broker 中,而不是直接发送给接收者。接收者通过订阅 Broker 中的特定主题或队列来接收消息。当有新的消息到达 Broker 时,Broker 将消息分发给所有订阅该主题或队列的接收者。这样一来,即使接收者不在线,Broker 也可以保存消息,并在接收者重新连接后将其发送给接收者。

总之,Broker 在异步调用中扮演了非常重要的角色,它为消息的传递提供了可靠的中间件,使得分布式系统更加健壮和高效。

 

 RabbitMq 交换机只负责消息的路由转发,不负责存储,队列要想接收到消息,首先需要交换机绑定队列

 

所谓的数据隔离,指RabbitMQ消息队列,主体角色: 发送者    消费者    交换机  队列  虚拟主机

消息先经过交换机进行路由转发,然后传递给队列(前提是绑定好) 然后一个虚拟主机内部可以有多个交换机和若干个消息队列,不同的虚拟主机具有隔离性。

 

 

其次是fanout模型

 这里的交换机类型是fanout,它会广播消息,然后路由到不同的队列,这里每一个队列就可以对应一个微服务,比如pulisher是支付服务,订单 积分服务,每一个微服务对应一个队列,

当然微服务做集群的话,也就是一个队列也可以有多个消费者。

 topic交换机,队列和交换机绑定的时候,可以使用通配符,比direct更灵活,direct交换机,队列与之绑定的话,一次只能使用一个具体的routeingKey

 在java代码中声明交换机和队列的两种方法

第一种方法是在配置类里面使用@Bean注解

第二种方法是使用@RabbitListener注解

 

 

 

 

posted @ 2024-01-16 21:38  -她的梦-  阅读(4)  评论(0编辑  收藏  举报