SpringCloudStream深入了解

235 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

使用SpringCloudStream集成RabbitMQ,我们很简单的就完成了集成。但是在简单的背后,我们越是想要深入了解更多的功能,那我们就需要对SpringCloudStream有更深入的了解。

如何配置RabbitMQ服务器

SpringBootautoconfigure包当中,有个RabbitProperties类,这个类就会解析application.yml中以spring.rabbitmq开头的配置。里面配置了跟RabbitMQ相关的主要参数,包含服务器地址等。里面对每个参数也都提供了默认值。默认就是访问本地的RabbitMQ服务。

#这几个是默认配置
spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
    virtual-host: /

如何声明ExchangeQueue

既然是要对接RabbitMQ,那么最终还是需要与RabbitMQ服务器进行交互的。从RabbitMQ的管理页面上来看,框架帮我们在RabbitMQ的根虚拟机上创建了一个topic类型的scstreamExchange交换机,然后在这个交换机上绑定了一个scstreamExchange.stream队列,绑定的RoutingKey#

而程序中的消息发送者是将消息发送到scstreamExchange交换机,然后RabbitMQ将消息转发到scstreamExchange.stream队列,消息接收者从队列接收到消息。这个流程,就是Spring Cloud Stream在背后为我们做的事情。

框架帮我们屏蔽了与消息中间件的交互细节,开发人员甚至都不需要感知消息中间件的存在,将更多的关注点放到业务处理的细节里。实际上,只需要将maven中的spring-cloud-starter-stream-rabbit依赖,换成spring-cloud-starter-stream-kafka,就可以完成与本地Kafka服务的交互,代码不需要做任何的改动。

设计的目的

框架的设计目的,是为了实现一套简明的事件驱动模型。在这个事件驱动模型中,是没有RabbitMQ中这些Exchangequeue或者是kafka中的Topic之类的这些功能的,所以这也意味着,如果想要使用RabbitMQ的一些特性功能,比如Quorum队列,死信队列,懒加载队列等,反而会比较麻烦。这就需要对各种基础概念有更深的了解。