RabbitMQ学习心得

86 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

消息中间件主要解决的问题是:

同步变异步 流量销锋 系统解耦 例如: 用户--->订单服务 会调用短信服务、邮件服务等、、、是同步区调用这些系统耦合度比较高。

mq可以解决。

1、创建一个队列(在项目启动时就创建)bean 2、创建一个生产者 3、创建一个消费者(消费者采用监听生产者)

交换器: 通过路由键分发不同的消息队列 再通过信道来传递给消费者

【发布与订阅、广播、主题】

direct(发布订阅)一个路由键对应一个消息队列进行匹配。 步骤: 生产者配置配置文件 交换器、路由键 消费者配置文件 交换器、路由键、队列名称

根据交换器指定对应的路由键找到对应的队列

  • topic(主题)交换器去模糊匹配路由键对应的消息队列。 所有服务的日志都进交换器,然后交换器去模糊匹配路由键对应的消息队列。 步骤: 创建服务生产者 配置文件给一个交换器名称即可 创建服务消费者

配置文件:交换器名称、消息队列名称

  1. fanout(广播) 将消息放到fanout(广播)的交换器,发送到每一个消息队列。然后由消费者直接订阅消息队列。(没有路由键)
  2. 广播模式不指定路由键,消息消费者直接全部订阅消费。(就是都可以所有服务只要配置指定交换器都可接收到消息)

实现松耦合设计

在消费者中添加一个服务即可。配置相同。

消息持久化

解决丢失消息: 消费者服务中把autoDelete =改 "false",表示在消费者宕机时依然往mq里发送消息,没有消费的消息都会被mq暂存起来。等待消费者服务启动后,立即消费.

解决ACK的内存泄露问题 1、在消费者端接收消息代码,用thy{}catch{}进行异常捕捉 2、在配置文件中添加重试次数

项目参考图:

在这里插入图片描述

代码地址:

github.com/SongXianYan… 编写确实不易