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> 函数式接口) │ └─────────────────────────────────────────────────────────┘


<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}

浙公网安备 33010602011771号