5、Spring Cloud Stream 配置体系完全指南

spring-cloud-stream Stream让我们不再关注具体MQ的细节我们只需要用一种适配绑定的方式,自动的给我们在各种MQ内切换,总的来说Stream能够屏蔽底层消息中间件的差异、降低切换成本,是统一消息的编程模型。 阅读详情

以下是一份系统性、深度解析、实战导向的《Spring Cloud Stream 配置体系详解:binders vs bindings vs kafka.binder vs kafka.bindings》,专为 Java 后端开发者设计,基于 Spring Cloud Stream 4.x + Spring Boot 3.x + Kafka,结合真实企业开发场景,提供清晰的配置层级关系图、中文注释详解、最佳实践推荐和完整可运行配置示例。


📜 Spring Cloud Stream 配置体系完全指南

✅ binders / bindings vs kafka.binder / kafka.bindings —— 关系、作用与最佳实践

作者:龙茶清欢 | 更新时间:2025年10月 | 基于 Spring Cloud Stream 4.1.0 + Spring Boot 3.2.x
100% 函数式模型 | 无注解 | 企业级实战配置


一、核心概念:四类配置的定位与层级关系

在 Spring Cloud Stream 中,配置分为 两个层级 和 两类作用域:

配置项作用域作用说明
spring.cloud.stream.binders全局绑定器配置定义消息中间件的连接信息和通用配置(如 Kafka 集群地址、安全协议)用于注册一个 Binder 实例,供多个 bindings 复用
spring.cloud.stream.bindings通道绑定配置定义每个输入/输出通道(即 Supplier/Function/Consumer)绑定到哪个 Topic/Queue指定“哪个函数发到哪个主题”
spring.cloud.stream.kafka.binderKafka Binder 专用配置覆盖或扩展 Kafka Binder 的全局默认配置(如安全、序列化、重试)仅对 kafka 类型的 binder 生效
spring.cloud.stream.kafka.bindingsKafka 通道专用配置覆盖或扩展 某个特定 binding 在 Kafka 上的通道级配置(如分区、ack、消费者组)仅对 Kafka Binder 的特定 binding 生效

🧩 四者关系图(推荐记忆方式)

                              ┌───────────────────────┐
                              │   spring.cloud.stream │
                              └───────────┬───────────┘
                                        │
                    ┌───────────────────┴───────────────────┐
                    │                                         │
        ┌─────────────────────┐                   ┌────────────────────────┐
        │   binders (全局)     │                   │      bindings (通道)     │
        │ 定义 Binder 实例     │                   │ 指定函数绑定到哪个 Topic │
        │ 如:kafka-binder-1   │                   │ 如:orderSupplier-out-0  │
        └───────────┬─────────┘                   └───────────┬────────────┘
                    │                                         │
        ┌───────────┴─────────┐                   ┌───────────┴────────────┐
        │ kafka.binder (Kafka) │                   │ kafka.bindings (Kafka)   │
        │ Kafka Binder 的全局  │                   │ Kafka 通道的专属配置     │
        │ 配置(安全、序列化等)│                   │ 如:分区数、消费组、ack  │
        └─────────────────────┘                   └────────────────────────┘

✅ 一句话总结:

  • binders → 定义“我用哪个消息系统”(如 Kafka、RabbitMQ)
  • bindings → 定义“哪个函数用哪个通道”
  • kafka.binder → 给 Kafka 这个“消息系统”设置全局参数
  • kafka.bindings → 给 Kafka 的“某个通道”设置专属参数

二、详细说明:每个配置项的语义与使用场景

✅ 1. spring.cloud.stream.binders —— 定义 Binder 实例(全局)

📌 作用:

注册一个 Binder 实例,用于被多个 bindings 引用。
一个 Binder 实例 = 一套连接配置 + 一个中间件类型。

📌 语法:
spring:
  cloud:
    stream:
      binders:
        # 自定义 binder 名称(推荐:binder-名称)
        kafka-binder-1:
          type: kafka             # 必须:指定 Binder 类型
          environment:            # Binder 的环境配置(底层是 Spring Boot 的 Environment)
            spring:
              kafka:
                bootstrap-servers: localhost:9092
                security:
                  protocol: PLAINTEXT
                # 可配置所有 Kafka 客户端参数
                producer:
                  acks: all
                  retries: 3
                  batch-size: 16384
                consumer:
                  auto-offset-reset: earliest
                  enable-auto-commit: false
📌 使用场景:
  • 你有多个应用,都连接同一个 Kafka 集群 → 可复用此 binder
  • 你有多个 Kafka 集群(开发、测试、生产),需要切换 binder
  • 你想为不同环境配置不同 Kafka 集群(如 dev/kafka:9092, prod/kafka:9093)

✅ 推荐命名:kafka-binder-1、kafka-prod、kafka-dev

❗ 注意:
  • type: kafka 是必须的,表示使用 spring-cloud-stream-binder-kafka
  • environment 下的 spring.kafka.* 是Kafka 客户端原生配置,不是 Stream 配置!

✅ 2. spring.cloud.stream.bindings —— 定义通道绑定(核心!)

📌 作用:

将你的函数(Supplier/Function/Consumer)绑定到具体的消息目的地(Topic/Queue)
这是你业务逻辑与消息系统之间的连接点。

📌 语法:
spring:
  cloud:
    stream:
      bindings:
        # 函数名-out-0 或 in-0,必须与 @Bean 方法名一致
        orderSupplier-out-0:
          destination: orders-created          # 发送到的 Topic 名
          content-type: application/json       # 序列化格式
          binder: kafka-binder-1               # 引用上面定义的 binder
        orderConsumer-in-0:
          destination: orders-created          # 从哪个 Topic 消费
          content-type: application/json
          binder: kafka-binder-1
          group: order-consumer-group          # 消费组(必须!)
        inventoryProcessor-in-0:
          destination: orders-created
          content-type: application/json
          binder: kafka-binder-1
        inventoryProcessor-out-0:
          destination: inventory-updated
          content-type: application/json
          binder: kafka-binder-1
📌 使用场景:
  • 你有多个函数,需要分别连接不同 Topic
  • 你希望明确指定每个函数用哪个 Binder(尤其在多中间件场景)
  • 你希望统一管理通道的 content-type、partition、binding name

✅ 关键命名规则:

  • Supplier → xxx-out-0
  • Function → xxx-in-0(输入),xxx-out-0(输出)
  • Consumer → xxx-in-0
  • xxx 是你的 @Bean 方法名

⚠️ 如果不写 binder,框架会自动使用默认 binder(第一个定义的或 kafka 类型的)


✅ 3. spring.cloud.stream.kafka.binder —— Kafka Binder 全局配置

📌 作用:

为所有使用 Kafka Binder 的通道设置默认的 Kafka 客户端参数
相当于为所有 bindings 设置“默认的 Kafka 配置”

📌 语法:
spring:
  cloud:
    stream:
      kafka:
        binder:
          # Kafka 集群地址(等价于 bootstrap.servers)
          brokers: localhost:9092

          # Kafka 客户端全局配置(会覆盖 binders 中的配置)
          configuration:
            # 生产者配置
            acks: all
            retries: 3
            batch-size: 16384
            linger-ms: 5
            # 消费者配置
            auto-offset-reset: earliest
            enable-auto-commit: false
            # 安全配置
            security.protocol: PLAINTEXT
            # 序列化器(推荐显式指定)
            key.serializer: org.apache.kafka.common.serialization.StringSerializer
            value.serializer: org.springframework.kafka.support.serializer.JsonSerializer
            key.deserializer: org.apache.kafka.common.serialization.StringDeserializer
            value.deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
            # 可信任的包(用于反序列化)
            spring.json.trusted.packages: com.example.model

          # 可选:自动创建 Topic
          auto-create-topics: true
          # 可选:Topic 分区数
          default-partition-count: 3
          # 可选:副本数
          default-replication-factor: 1
📌 使用场景:
  • 你只有一个 Kafka 集群,所有服务都用它
  • 你希望统一所有生产者/消费者的 Kafka 客户端行为
  • 你想避免在每个 binder 中重复写 bootstrap-servers、security.protocol

✅ 注意:kafka.binder 中的配置优先级高于 binders.environment.spring.kafka.*
✅ configuration 下的键是Kafka 客户端原生属性,不是 Spring Cloud Stream 属性!


✅ 4. spring.cloud.stream.kafka.bindings —— Kafka 通道专属配置

📌 作用:

为某个特定的 binding(通道)设置 Kafka 专属的高级配置
用于覆盖全局配置,实现细粒度控制

📌 语法:
spring:
  cloud:
    stream:
      kafka:
        bindings:
          # 指定哪个 binding(必须与 bindings 中的名称一致)
          orderSupplier-out-0:
            producer:
              # 覆盖全局的 acks,这个生产者要求最强一致性
              acks: all
              # 覆盖全局的重试次数
              retries: 5
              # 覆盖全局的批量大小
              batch-size: 32768
              # 覆盖全局的序列化器(极少数场景需要)
              key-serializer: org.apache.kafka.common.serialization.StringSerializer
              value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
          orderConsumer-in-0:
            consumer:
              # 覆盖全局的消费组(可选,但 bindings 中已配置)
              group: order-consumer-group
              # 覆盖全局的 offset 重置策略
              auto-offset-reset: latest
              # 覆盖全局的自动提交
              enable-auto-commit: false
              # 覆盖全局的拉取批大小
              fetch-min-size: 1048576
              # 覆盖全局的并发消费数(推荐!)
              concurrency: 3
              # 覆盖全局的分区分配策略
              partition-assignment-strategy: org.apache.kafka.clients.consumer.RangeAssignor
📌 使用场景:
  • 某个订单生产者需要更高的可靠性(acks=all, retries=5)
  • 某个通知消费者需要快速消费(auto-offset-reset=latest)
  • 某个高吞吐通道需要提高并发度(concurrency=5)
  • 某个通道需要不同的分区策略(RoundRobinAssignor)

✅ 优先级:
kafka.bindings.xxx > kafka.binder > binders.environment


三、企业级推荐:如何组织配置?—— 最佳实践

场景推荐配置方式
✅ 单 Kafka 集群,多个服务使用 kafka.binder + bindings,不定义 binders
✅ 多 Kafka 集群(dev/test/prod)定义 binders + bindings,用 profile 切换
✅ 不同通道需要不同配置使用 kafka.bindings.xxx 覆盖特定通道
✅ 生产环境要求高可靠kafka.binder 设置 acks=all, retries=5,kafka.bindings.orderSupplier-out-0 覆盖更高
✅ 开发环境快速调试kafka.binder 设置 auto-create-topics=true, acks=1

✅ 终极推荐结构(企业级标准):

# 🚀 推荐:使用 "kafka.binder" + "bindings" + "kafka.bindings" 三者组合
# 不定义 binders,除非你有多个中间件或多个集群

四、完整实战配置示例(含详细中文注释)

📂 文件:application.yml(推荐用于开发/测试)

# ================================================================
# 📌 Spring Cloud Stream Kafka 配置(企业级推荐结构)
# ================================================================

spring:
  cloud:
    stream:
      # ---------------------【核心:绑定通道】---------------------
      # 每个函数(Supplier/Function/Consumer)必须在此声明绑定
      # 命名规则:函数名 + -in-0 / -out-0
      bindings:
        # 生产者:订单创建事件
        orderSupplier-out-0:
          destination: orders-created           # 发送到 Topic:orders-created
          content-type: application/json        # JSON 序列化(默认,但显式声明更清晰)
          # binder: kafka-binder-1              # ⚠️ 不写,使用默认 binder(kafka)

        # 消费者:处理订单(消费 orders-created)
        orderConsumer-in-0:
          destination: orders-created           # 从 orders-created 消费
          content-type: application/json
          group: order-consumer-group           # ✅ 必须配置消费组,避免重复消费
          # binder: kafka-binder-1              # 使用默认 binder

        # 处理器:订单 → 发货单
        inventoryProcessor-in-0:
          destination: orders-created           # 输入:订单
          content-type: application/json
        inventoryProcessor-out-0:
          destination: inventory-updated        # 输出:库存更新事件
          content-type: application/json

        # 消费者:处理库存更新(消费 inventory-updated)
        notificationConsumer-in-0:
          destination: inventory-updated        # 从 inventory-updated 消费
          content-type: application/json
          group: notification-consumer-group    # ✅ 必须配置消费组

      # ---------------------【全局:Kafka Binder 配置】---------------------
      # 为所有 Kafka 通道设置默认的 Kafka 客户端参数
      # 优先级:高于 binders.environment.spring.kafka.*
      kafka:
        binder:
          # Kafka 集群地址(等价于 bootstrap.servers)
          brokers: localhost:9092

          # Kafka 客户端全局配置(所有生产者/消费者都会继承)
          configuration:
            # === 生产者配置 ===
            acks: 1                               # 开发环境:1,生产环境建议 all
            retries: 3                            # 发送失败重试次数
            batch-size: 16384                     # 批量发送大小(字节)
            linger-ms: 5                          # 等待多久凑够批量(ms)
            max-in-flight-requests: 5             # 最大未确认请求数
            # === 消费者配置 ===
            auto-offset-reset: earliest           # 从最早消息开始消费(开发推荐)
            enable-auto-commit: false             # 手动提交,更可靠
            fetch-max-wait: 500                   # 拉取最大等待时间(ms)
            fetch-min-size: 1048576               # 最小拉取数据量(1MB)
            # === 安全与序列化 ===
            security.protocol: PLAINTEXT          # 开发环境用 PLAINTEXT
            key.serializer: org.apache.kafka.common.serialization.StringSerializer
            value.serializer: org.springframework.kafka.support.serializer.JsonSerializer
            key.deserializer: org.apache.kafka.common.serialization.StringDeserializer
            value.deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
            spring.json.trusted.packages: com.example.model  # 允许反序列化此包下的类

          # 自动创建 Topic(开发推荐,生产建议手动创建)
          auto-create-topics: true
          # 默认分区数(Topic 未指定时使用)
          default-partition-count: 3
          # 默认副本数(生产建议 2~3)
          default-replication-factor: 1

        # ---------------------【通道专属:Kafka Binding 配置】---------------------
        # 针对特定通道覆盖全局配置(细粒度控制)
        bindings:
          # ✅ 订单生产者:要求最高可靠性(生产环境推荐)
          orderSupplier-out-0:
            producer:
              acks: all                           # 必须确认所有副本都写入
              retries: 5                          # 重试5次,确保不丢消息
              batch-size: 32768                   # 更大批量,提升吞吐
              compression-type: snappy            # 使用 snappy 压缩,节省带宽
              # 如果生产者发送失败,不重试,而是记录日志
              # delivery-timeout-ms: 30000          # 发送超时时间

          # ✅ 订单消费者:高并发、手动提交
          orderConsumer-in-0:
            consumer:
              # 覆盖全局的消费组(可选,bindings 中已配置)
              group: order-consumer-group
              # 重置策略:开发用 earliest,生产用 latest
              auto-offset-reset: earliest
              # 并发消费:3 个线程同时消费(提升吞吐)
              concurrency: 3
              # 手动提交偏移量
              enable-auto-commit: false
              # 每次拉取最大消息数(避免单次拉取过多)
              max-poll-records: 500
              # 消费者心跳超时(避免误认为宕机)
              session-timeout-ms: 45000
              heartbeat-interval-ms: 10000

          # ✅ 通知消费者:快速消费,不关心历史数据
          notificationConsumer-in-0:
            consumer:
              auto-offset-reset: latest           # 只消费新消息(生产推荐)
              concurrency: 2                      # 并发数2
              enable-auto-commit: false

          # ✅ 处理器(Function):不需要特殊配置,继承全局即可
          # inventoryProcessor-in-0 和 inventoryProcessor-out-0 不配置,使用默认

      # ---------------------【可选:启用 Actuator 监控】---------------------
      # 用于查看消息吞吐、延迟、错误等
      function:
        definition: orderSupplier;inventoryProcessor;orderConsumer;notificationConsumer

五、生产环境配置建议(application-prod.yml)

# ==================== application-prod.yml ====================
spring:
  cloud:
    stream:
      kafka:
        binder:
          brokers: kafka-prod-1:9092,kafka-prod-2:9092,kafka-prod-3:9092
          configuration:
            acks: all
            retries: 10
            batch-size: 65536
            linger-ms: 10
            max-in-flight-requests: 1
            security.protocol: SSL
            ssl.truststore.location: /certs/kafka-truststore.jks
            ssl.truststore.password: changeit
            ssl.keystore.location: /certs/kafka-keystore.jks
            ssl.keystore.password: changeit
            ssl.endpoint.identification.algorithm: HTTPS
            key.serializer: org.apache.kafka.common.serialization.StringSerializer
            value.serializer: org.springframework.kafka.support.serializer.JsonSerializer
            key.deserializer: org.apache.kafka.common.serialization.StringDeserializer
            value.deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
            spring.json.trusted.packages: com.example.model
          auto-create-topics: false               # 生产环境禁止自动创建
          default-partition-count: 6              # 每个 Topic 6 分区
          default-replication-factor: 3           # 3 副本,高可用

        bindings:
          orderSupplier-out-0:
            producer:
              acks: all
              retries: 10
              delivery-timeout-ms: 60000          # 60秒超时
              compression-type: lz4
          orderConsumer-in-0:
            consumer:
              auto-offset-reset: latest
              concurrency: 6                      # 6 个线程,匹配 6 分区
              enable-auto-commit: false
              max-poll-records: 1000
              session-timeout-ms: 45000
              heartbeat-interval-ms: 10000

✅ 生产环境建议:

  • 关闭 auto-create-topics
  • 手动创建 Topic,设置分区数、副本数、保留时间
  • 使用 SSL 加密
  • 设置合理的 concurrency(等于分区数)

六、常见错误与避坑指南

错误原因解决方案
❌ No binder configuration found for 'kafka'你用了 kafka.binder 但没加 type: kafka确保 kafka.binder 在 spring.cloud.stream.kafka 下
❌ 消费者不消费消息没配置 group每个 consumer-in-0 必须配置 group
❌ 消息乱序没设置 SHARDING_KEY顺序消息需用 RocketMQ 或 Kafka 的 partitionKey
❌ 序列化失败没配置 spring.json.trusted.packages添加你的 POJO 所在包名
❌ binder 不生效bindings 中写了 binder: xxx,但 binders 里没定义要么删掉 binder,要么在 binders 中定义
❌ 两个服务用同一个 group重复消费每个服务应有独立 group(如 order-service-group)

七、配置推荐结构总结(企业级标准)

层级是否推荐说明
✅ spring.cloud.stream.bindings必须使用定义每个函数绑定哪个 Topic,必须写
✅ spring.cloud.stream.kafka.binder强烈推荐统一 Kafka 全局配置,避免重复
✅ spring.cloud.stream.kafka.bindings推荐用于覆盖特定通道的高级配置(如并发、acks)
⚠️ spring.cloud.stream.binders按需使用仅当你有多个中间件或多个 Kafka 集群时才用
❌ spring.cloud.stream.kafka.bindings + bindings.binder避免混合会引发配置混乱,优先用 kafka.bindings

✅ 最终推荐配置结构(90% 项目适用):

spring:
  cloud:
    stream:
      bindings:                    # ✅ 必须:通道绑定
        orderSupplier-out-0: { ... }
        orderConsumer-in-0: { ... }

      kafka:
        binder:                    # ✅ 强烈推荐:全局 Kafka 配置
          brokers: ...
          configuration: { ... }

        bindings:                  # ✅ 推荐:通道专属覆盖
          orderSupplier-out-0: { producer: ... }
          orderConsumer-in-0: { consumer: ... }

八、附录:完整可运行项目结构(建议)

src/
└── main/
    ├── java/
    │   └── com/example/streamapp/
    │       ├── OrderServiceApplication.java
    │       ├── model/
    │       │   └── Order.java
    │       └── config/
    │           └── OrderBindings.java    # @Bean Supplier/Consumer 定义
    └── resources/
        ├── application.yml               # 开发配置(含完整注释)
        ├── application-prod.yml          # 生产配置
        └── application-dev.yml           # 开发配置(auto-create-topics=true)

✅ 使用 Spring Boot Profile 切换:

# 开发环境
java -jar app.jar --spring.profiles.active=dev

# 生产环境
java -jar app.jar --spring.profiles.active=prod

✅ 总结:一句话记住配置关系

“bindings 是通道的门牌号,kafka.binder 是 Kafka 的总控台,kafka.bindings 是某个房间的特殊开关。”

你写的是业务行为,框架帮你连接消息系统,而配置就是连接的说明书。


Spring Cloud Stream 深度解析 Spring Cloud Stream是一个轻量级的事件驱动框架,可以帮助开发人员构建微服务应用、SOA应用程序。它基于Spring Boot实现了简单易用的消息流绑定能力。概念及术语使用场景运行流程配置及参数源码分析测试用例未来发展方向Spring Cloud Stream是一个轻量级的事件驱动框架,它允许开发人员通过声明性方法来创建消费和产生事件。在这种机制下,应用程序无需显式地连接到Message Broker(即中间件),消息从生产者发送到消费者,并最终被消费者处理完毕。 阅读详情

相关推荐

端侧部署与优化:让 AI 真正走进现实生活的关键技术

AI 的开发流程分为 “训练” 与 “推理” 两大阶段。在训练阶段,科研人员依托云端海量数据和高性能 GPU 算力,构建出精度优异的 AI 模型 —— 比如能识别 1000 种物体的图像分类模型、能理解人类语言的自然语言处理模型。但这些在云端 “战绩斐然” 的模型,若直接应用到现实场景中,却会面临三大 “落地困境”。从云端到端侧,从模型压缩到硬件适配,端侧部署与优化技术解决了 AI 落地的核心难题,让 AI 不再是实验室里的 “高精尖技术”,而是融入日常生活的 “实用工具”。

m0_63477749的博客 1049

RcoketMQ 全部配置表

1、Broker配置 参数名 默认值 说明 listenPort 10911 接受客户端连接的监听端口 namesrvAddr null nameServer 地址 brokerIP1 网卡的 InetAddress 当前 broker 监听的 IP brokerIP2 跟 brokerIP1 一样 存在主从 bro..

Xx__WangQi的博客 657

Slurm集群调度策略详解(1)-主调度

Slurm调度系统中针对作业的调度主要有三种,主调度,回填调度,GANG调度,这篇文章主要针对主调度进行解析。

h_m_l的博客 6029

spring cloud stream配置多个kafka binders

实际工作中可能在一个工程里面同时连接多个不同的kafka集群读写数据,spring cloud stream也提供了类似的配置方式,首先给出一个demo配置: spring: cloud: stream: #指定用kafka stream来作为默认消息中间件 # default-binder: kafka # kafka: # #来自Ka

xiao_jun_0820的专栏 1万+

HttpClient跳过HTTPS证书验证的3种实战方法(含完整代码示例)

本文详细介绍了HttpClient跳过HTTPS证书验证的3种实战方法,包括自定义TrustManager、SSLContext配置和HttpClientBuilder高级定制,并提供完整代码示例。这些方法适用于开发和测试环境,帮助开发者快速解决自签名证书或未认证证书导致的HTTPS请求失败问题,但需注意生产环境的安全风险。

weixin_29213655的博客 528

CODESYS做Modbus TCP主站踩坑记:从IP配置到数据映射的完整避坑指南

本文详细记录了在CODESYS中配置Modbus TCP主站的全过程,从IP配置到数据映射的常见问题及解决方案。重点解析了网络适配器选择、Slave ID误解、地址偏移陷阱等关键问题,并提供了实用的调试技巧和性能优化建议,帮助工业通信开发者高效避坑。

weixin_30642561的博客 624

通过 Spring Cloud Stream 访问 Kafka

认识 Apache Kafka 什么是 Kafka 诞生之初被用作消息队列,一般来说做一个日志消息的转发,现已发展为强大的分布式事件流平台 LinkedIn 在 2011 年开源 Spring Cloud Stream 对 Kafka 的支持 依赖 引入 Spring Cloud - spring-cloud-starter-stream-kafka 配置 spring.cloud.st...

weixin_43790623的博客 1661

R语言WGCNA实战:从基因表达矩阵到模块可视化全流程(附避坑指南)

本文详细介绍了使用R语言进行WGCNA(加权基因共表达网络分析)的完整实战流程,涵盖从基因表达矩阵预处理、软阈值选择、网络构建与模块识别,到模块与表型关联分析及结果可视化的关键步骤。文章重点解析了代码实现,并提供了针对数据质量检查、参数调整等常见问题的避坑指南,帮助生物信息学研究者高效挖掘基因共表达模块的生物学意义。

weixin_29062823的博客 578

Spring Cloud Stream Binder实施

Binder实施 Apache Kafka Binder 用法 对于使用Apache Kafka绑定器,您只需要使用以下Maven坐标将其添加到您的Spring Cloud Stream应用程序: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId&

Carrieº 的博客 1380

Halcon深度图转点云实战:从XYZ映射到3D可视化全解析

本文详细解析了如何使用Halcon将深度图转换为点云图,涵盖从XYZ映射到3D可视化的全流程。通过实战案例和代码示例,介绍了深度图预处理、xyz_to_object_model_3d核心转换及3D可视化技巧,适用于工业检测、三维重建等场景。

stem5的博客 764

2023年LitCTF web组wp

1、导弹迷踪2、1zjs3、php是世界上最好的语言!!4、Ping5、我Flag呢?7、作业管理系统8、Vim yyds10、这是什么?SQL!注一下!11、Flag点击就送!12、就当无事发生13、彩蛋。

m0_74160536的博客 1587

SpringBoot 配置文件这样加密,才足够安全!

所以需要对敏感数据进行加密,这样防止密码泄露Jasypt这个库为我们解决了这个问题,实现了springboot配置的自定加密加密2.1 引入依赖2.4.0pomimportweb 和 测试junitjunittestjdbcmysql2.2 配置application信息jasypt配置jasypt:encryptor:# 加密算法# 加密使用的盐2.3 加密解密测试/**

qq_42633395的博客 1825

Apollo 9.0 参考线生成器 -- ReferenceLineProvider

在基于参考线的规划算法中,参考线是Planning一切工作的基础和前提,所以搞清楚参考线怎么来的就变得很重要。为此,首先需要了解Planning 与 Routing的交互,通过交互得到路径片段,这些路径片段就告诉我们该怎么走,再在此基础上生成参考线,最后使用不同的平滑算法对参考线进行平滑,得到一条光滑的参考线。

WaiNgai 1664

Spring Cloud Stream详解

Spring Cloud Stream是一个用于构建 与 共享消息系统 连接的高度可扩展的 事件驱动微服务。通过Stream可以很轻松的整合RabbitMQ和Kafka,并且可以在两个消息中间件之间来回切换使用。一句话,屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型。.........

怪咖@的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【spring cloud stream】spring cloud stream配置多个kafka地址

网上查找了关于配置多个kafka地址的方法,可惜没有找到,在一个博客看到了这个方法,大致方法是对的,但是还是有小错误,导致失败。所以自己修改完亲测有效后,写了这个博客。 spring: cloud: stream: binders: # 接下来的kafka1和kafka2就是两个kafka broker的环境配置,配置完成后可以应用kafka1、kafka2这个定义的名字 # 在别的地方引用。功能和profile中的dev环境、test环境、prod

非正常人研究室 2504

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

3、Spring Cloud Stream + RocketMQ 高级消息特性完全指南

Spring Cloud Stream + RocketMQ 高级消息特性指南 本文全面介绍了如何利用Spring Cloud Stream 4.x和RocketMQ Binder实现高级消息特性,包括: 核心定位:Spring Cloud Stream作为消息通道抽象层,负责统一接口、自动绑定和集成监控,但不处理具体消息协议细节。 能力边界:详细对比了RocketMQ Binder对各种消息类型的支持情况,包括普通消息、顺序消息、延时消息、事务消息等。 实战方案: 普通消息:通过StreamBridge发

python15397的博客 983

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Spring cloud stream【消息分组】

  上篇文章我们简单的介绍了stream的使用,发现使用还是蛮方便的,但是在上个案例中,如果有多个消息接收者,那么消息生产者发送的消息会被多个消费者都接收到,这种情况在某些实际场景下是有很大问题的,比如在如下场景中,订单系统我们做集群部署,都会从RabbitMQ中获取订单信息,那如果一个订单同时被两个服务获取到,那么就会造成数据错误,我们得避免这种情况。这时我们就可以使用Stream中的消息分组来...

波波烤鸭的博客 9258

RocketMQ 与 Spring Cloud Stream之事务消息配置

RocketMQ的事务消息设计是为了解决分布式系统中数据一致性的问题。在分布式系统中,由于数据可能分布在不同的服务或节点上,因此需要一种机制来确保数据的最终一致性。事务消息通过引入本地事务和消息状态的关联,确保了消息的发送与本地事务的执行结果紧密相关,从而避免了数据不一致的问题。

D_J_Dragon的博客 1798

Spring Cloud Stream Applications Einstein SR5 是一个基于 Spring Cloud Stream 构建的应用程序

Einstein SR5 是其中的一个示例项目,展示了如何使用 Spring Cloud Stream 进行消息的发布和订阅,以及如何集成其他技术栈如 Spring Boot、Spring Data 等。Spring Cloud Stream 是一个用于构建消息驱动微服务的框架,它提供了一种简单的方式来处理消息的发送和接收。:使用 Spring Boot 的配置管理功能来管理应用程序的各种配置,包括消息中间件的连接信息、消息通道的定义等。Kinesis 提供了强大的扩展性和与其他 AWS 服务的集成能力。

[Blog][Domain] programb.blog.youkuaiyun.com 535

(十八)Spring Cloud 学习笔记之Spring Cloud Stream

Spring Cloud Stream1 概述2 核心概念3 入门案例3.1 准备工作3.2 消息生产者3.3 消息消费者4 自定义消息通道5 消息分组6 消息分区 1 概述 Spring Cloud Stream由一个中间件中立的核组成。应用通过Spring Cloud Stream插入的input(相当于消费者consumer,它是从队列中接收消息的)和output(相当于生产者produce...

淮右布衣的博客 1105

消息驱动:Spring Cloud Stream

1.stream 配置中的含义 当我们使用默认group,和destination时默认创建名为input 的topic类型的exchange spring.cloud.stream.bindings.input.group=queueName spring.cloud.stream.bindings.input.destination=exchangeName

peng.zhou 1万+

Spring Batch学习,和Spring Cloud Stream区别

Spring Batch学习,和Spring Cloud Stream区别

qq_37954693的博客 993

spring cloud stream

spring cloud stream 是一个用来为微服务应用构建消息驱动能力的框架,是基于spring boot 来创建独立的、可用于生产的spring应用程序。 1.配置 2.接收消息 1.注解绑定@EnableBinding(Sink.class) 2.注解监听@StreamListener(Sink.INPUT) 3.发送消息(自动发送) 1.注解绑定@EnableBinding(Source.class) 2.注解发送通道@InboundChannelAdapter poller = @poll

vicky457的博客 285

Spring cloud stream实现Kafka的消息收发

用Spring cloud stream可以很方便的实现对Kafka消息的收发,以下是我按照Spring官网的例子实现的一个Kafka的应用。 这个例子是实现一个电信公司收集用户消费电信服务,并计算费用的场景。包括了三个应用程序。

2367

Spring Cloud Stream 最佳实践指南

Spring Cloud Stream 是一个用于构建消息驱动微服务的框架,它基于 Spring Boot 和 Spring Integration,提供了一套中间件无关的编程模型。核心价值:Binder 抽象:应用代码与消息中间件(Kafka / RabbitMQ / Pulsar 等)解耦函数式编程模型风格的SupplierFunctionConsumer声明式配置:通过控制绑定、分区、消费者组、并发开箱即用。

J.Anson的博客 452

**Spring Cloud Stream Applications Einstein SR5** 是一组预构建的、可重用的 **Spring Cloud Stream 微服务应用程序模板

**Spring Cloud Stream Applications Einstein SR5** 是一组预构建的、可重用的 **Spring Cloud Stream 微服务应用程序模板**,旨在简化基于消息驱动架构(如 Kafka、RabbitMQ)的微服务开发。它属于 **Spring Cloud Stream App Starters** 项目的一部分,专为快速搭建事件流处理流水线而设计。

[Blog][Domain] programb.blog.youkuaiyun.com 544
上一篇: Spring Cloud Gateway 详细说明文档
下一篇: 4、(创建型设计模式)Java 单例模式深度学习指南
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值