spring-cloud-starter-stream-rabbit

采用 Spring Cloud Stream + RabbitMQ 组合,基于 函数式编程模型 构建消息驱动微服务。

┌─────────────────────────────────────────────────────────┐
│                      Controller                          │
│                    (业务入口层)                           │
└─────────────────────┬───────────────────────────────────┘
                      │
                      ▼
┌─────────────────────────────────────────────────────────┐
│                    MessageService                        │
│              (StreamBridge 动态消息发送)                  │
└─────────────────────┬───────────────────────────────────┘
                      │ send() / sendDelayedMessage()
                      ▼
┌─────────────────────────────────────────────────────────┐
│         test-order-topic (交换机 - Topic类型)            │
└─────────────────────┬───────────────────────────────────┘
                      │ routing: #
                      ▼
┌─────────────────────────────────────────────────────────┐
│      test-order-topic.test-order-group (队列)            │
│              + 死信队列配置                               │
└─────────────────────┬───────────────────────────────────┘
                      │ consume
                      ▼
┌─────────────────────────────────────────────────────────┐
│             TestOrderConsumer.testOrder()               │
│          (Consumer<TestOrderPo> 函数式接口)              │
└─────────────────────────────────────────────────────────┘

 

image

 

image

 

    <dependencyManagement>
        <dependencies>
            <!-- SpringCloud 微服务 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2020.0.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- SpringCloud Alibaba 微服务 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2021.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- SpringBoot 依赖配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.4.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--spring读取bootstrap.yml-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bootstrap</artifactId>
                <version>3.0.1</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

 

       <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>

 

spring:    
  cloud:    
    stream:
      default-binder: my-rabbit
      # 服务器
      binders:
        my-rabbit:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: 192.168.80.10
                port: 5672
                username: admin
                password: public
                virtual-host: test
      # 交换机 队列
      bindings:
        # in:消费端, 0:第一个消费者 testOrder:消费者方法名
        testOrder-in-0:
          destination: test-order-topic  # 交换机名 
          content-type: application/json
          group: test-order-group        # 队列名 {destination}.{group}
          binder: my-rabbit
      # 消费者 方法名
      function:
        definition: testOrder;

生产者

@RestController
public class TestOrderController {
    private String bindName = "test-order-topic";

    @Autowired
    private StreamBridge streamBridge;

    @GetMapping("test")
    public void test() {
        TestOrderPo testOrderPo = new TestOrderPo();
        testOrderPo.setOrderId("11111");
        streamBridge.send(bindName, testOrderPo);
    }

}

消费者

import java.util.function.Consumer;

@Slf4j
@Component
public class TestOrderConsumer {
    @Bean
    public Consumer<TestOrderPo> testOrder() {
        return request -> log.info("MQ消费  req:{}", request);
    }
}

 

 

┌─────────────────────────────────────────────────────────┐
│  交换机 (Exchange)                                       │
│  ├── 名称:test-order-topic                              │
|-- durable:true (持久化) │ ├── 类型:topic │ │ └── 路由键:# │ │ │ │ │ │ 绑定 (Binding) │ │ └─────────────────────────────────────▶ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 队列 (Queue) │ │ │ │ 名称:test
-order-topic.test-order-group │ │ │ │ durable: true (持久化) │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘

默认交换机类型:topic

默认路由键 通配符 #
# : 匹配零个或多个单词
* : 匹配恰好一个单词

命名规则:
交换机 destination
队列 {destination}.{group}

 

posted @ 2026-07-28 15:53  Peter.Jones  阅读(6)  评论(0)    收藏  举报