Spring Cloud Stream 4.0.4 rabbitmq 发送消息多function

使用 idea 创建 Springboot 项目

在这里插入图片描述

添加 Spring cloud stream 和 rabbitmq 依赖

在这里插入图片描述

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springcloudstream-demo1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springcloudstream-demo1</name>
    <description>springcloudstream-demo1</description>
    <properties>
        <java.version>17</java.version>
        <spring-cloud.version>2023.0.0-RC1</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-web</artifactId>-->
<!--        </dependency>-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-test-binder</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>

修改配置文件

--- # rabbitmq 消费者配置
spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: ruoyi
    password: ruoyi123
  cloud:
    stream:
      rabbit:
        bindings:
          demo2-in-0:
            consumer:
              delayed-exchange: true
      bindings:
        demo-in-0:
          content-type: application/json
          destination: demo-destination
          group: demo-group
          binder: rabbit
        demo1-in-0:
          content-type: application/json
          destination: demo1-destination
          group: demo1-group
          binder: rabbit
        demo2-in-0:
          content-type: application/json
          destination: demo2-destination
          group: demo2-group
          binder: rabbit
    function:
      definition: demo;demo1;demo2

创建消费者

package com.example.springcloudstreamdemo1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import java.util.function.Consumer;

@SpringBootApplication
public class SpringcloudstreamDemo1Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudstreamDemo1Application.class, args);
    }
 	 /**
     * 注意方法名称 demo 要与配置文件中的spring.cloud.stream.bindings.demo-in-0 保持一致
     * 其中 -in-0 是固定写法,in 标识消费者类型,0是消费者索引
     */
    @Bean
    public Consumer<Person> demo() {
        return person -> {
            System.out.println("Received: " + person);
        };
    }
    @Bean
    public Consumer<String> demo1() {
        return msg -> {
            System.out.println("Received: " + msg);
        };
    }
    @Bean
    public Consumer<Person> demo2() {
        return msg -> {
            System.out.println("Received: " + msg);
        };
    }

    public static class Person {
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String toString() {
            return this.name;
        }
    }
}

注意当多个消费者时,需要添加配置项:spring.cloud.function.definition
在这里插入图片描述

启动项目

启动日志
在这里插入图片描述
在这里插入图片描述

查看 mq 控制台

交换机信息

在这里插入图片描述
交换机名称对应:
spring.cloud.stream.bindings.demo-in-0.destination配置项的值

队列信息

在这里插入图片描述

  • 队列名称是交换机名称+分组名

添加生产者配置

--- #生产者配置
spring:
  cloud:
    stream:
      rabbit:
        bindings:
          demo2-out-0:
            producer:
              delayedExchange: true #设置为延迟队列
      bindings:
        demo-out-0:
          content-type: application/json
          destination: demo-destination  # 同消费者保持一致
          binder: rabbit
        demo1-out-0:
          content-type: application/json
          destination: demo1-destination
          binder: rabbit
        demo2-out-0:
          content-type: application/json
          destination: demo2-destination
          binder: rabbit

创建消息生产者

package com.example.springcloudstreamdemo1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.function.StreamBridge;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProducerController
{
    @Autowired
    private StreamBridge streamBridge;


    @GetMapping("sendMsg")
    public String sendMsg(int delay, String name){

        //delay 延时时间毫秒
        SpringcloudstreamDemo1Application.Person person = new SpringcloudstreamDemo1Application.Person();
        person.setName(name);
        Message<SpringcloudstreamDemo1Application.Person> message = MessageBuilder.withPayload(person)
                .setHeader("x-delay", delay).build();
        // 发送延时消息
        streamBridge.send("demo2-out-0", message);

        streamBridge.send("demo1-out-0", person);

        streamBridge.send("demo-out-0", person);

        return "发送成功";
    }
}



启动测试

发送消息

http://localhost:8080/sendMsg?delay=10000&name=zhangsan

打印消息

在这里插入图片描述

问题总结

问题一

Multiple functional beans were found [*,*], thus can't determine default function definition. Please use 'spring.cloud.function.definition' property to explicitly define it.

解决办法:
查看配置是否正确:
spring.cloud.function.definition
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/223274.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣100 相同的数(两种解法)

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true 示例 2&…

一键抠图|3个智能AI抠图软件实现抠图自由!

听说你对如何利用AI抠图技术去除白色背景感兴趣&#xff1f;设想一下&#xff0c;你有一张某人站在白色背景前的照片&#xff0c;而你只希望能留下这个人物。在过去&#xff0c;你可能需要花费大量时间和精力手动进行抠图。但现在&#xff0c;AI技术来拯救你了&#xff01;AI可…

180天Java从入门到就业-Day04-01Java程序流程控制介绍、Java分支结构if语句

1.程序流程控制介绍 1.1 流程控制结构介绍 流程控制语句是用来控制程序中各语句执行顺序的语句,可以将语句组合成完成一定功能的逻辑模块。 一个程序会包含三种流程控制结构:顺序结构、分支结构、循环结构 顺序结构在没有使用程序流程控制语句(if-else语句、switch-case语…

【JS】检索树结构,并返回结果节点的路径与子节点

【JS】检索树结构&#xff0c;并返回结果节点的路径与子节点 需求代码效果展示 需求 一个树结构&#xff0c;需要添加条件检索功能&#xff0c;检索结果依然是一个树结构&#xff0c;包含所有的符合要求的节点&#xff0c;以及他们到根节点的路径&#xff0c;与他们的子节点 …

社区分享|简米Ping++基于MeterSphere开展异地测试协作

上海简米网络科技有限公司&#xff08;以下简称为“简米”&#xff09;是国内开放银行服务商&#xff0c;高新技术企业&#xff0c;中国支付清算协会会员单位。自2014年成立至今&#xff0c;简米长年聚焦金融科技领域&#xff0c;通过与银行、清算组织等金融机构合作&#xff0…

知识小课堂:在光伏电站中发生绝缘阻抗异常的排查方法

【摘要】近几年&#xff0c;光伏发电技术迅猛发展&#xff0c;光伏扶贫电站及分布式光伏使光伏发电走进千家万户。然而光伏发电设备运行期间仍存在隐患。及时发现并解决*常见异常运行故障&#xff0c;可以很大地提高光伏发电设备可利用率&#xff0c;是保证光伏发电设备正常运行…

会声会影2024软件还包含了视频教学以及模板素材

会声会影2024中文版是一款加拿大公司Corel发布的视频编软件。会声会影2024官方版支持视频合并、剪辑、屏幕录制、光盘制作、添加特效、字幕和配音等功能&#xff0c;用户可以快速上手。会声会影2024软件还包含了视频教学以及模板素材&#xff0c;让用户剪辑视频更加的轻松。 会…

【ArcGIS微课1000例】0078:创建点、线、面数据的最小几何边界

本实例为专栏系统文章:讲述在ArcMap10.6中创建点数据最小几何边界(范围),配套案例数据,持续同步更新! 文章目录 一、工具介绍二、实战演练三、注意事项一、工具介绍 创建包含若干面的要素类,用以表示封闭单个输入要素或成组的输入要素指定的最小边界几何。 工具位于:数…

有没有数字化转型服务提供商推荐?企业数字化转型要如何做?

企业数字化转型涉及将数字技术全面集成到组织的各个方面&#xff0c;深刻地重塑其运营方式并为客户提供价值。这不仅仅是将已经存在的东西自动化&#xff0c;而是代表了一种重要的文化变革&#xff0c;赋予企业不断挑战既定规范、创新和适应的能力。从运营和供应链管理&#xf…

音视频之旅 - 基础知识

图像基础知识 像素 像素是图像的基本单元&#xff0c;一个个像素就组成了图像。你可以认为像素就是图像中的一个点。在下面这张图中&#xff0c;你可以看到一个个方块&#xff0c;这些方块就是像素 分辨率 图像&#xff08;或视频&#xff09;的分辨率是指图像的大小或尺寸。…

家庭医生上门预约小程序源码系统 附带完整的搭建教程

在当前的医疗服务市场中&#xff0c;患者往往需要前往医院或诊所进行就诊&#xff0c;这不仅浪费了时间和精力&#xff0c;还可能增加交叉感染的风险。因此&#xff0c;开发一款家庭医生上门预约小程序源码系统&#xff0c;可以让患者在家中方便快捷地预约医生上门服务&#xf…

让我们向您介绍葡萄酒中的皮诺家族

对于那些喜欢浏览商店里的葡萄酒通道或餐厅的葡萄酒菜单的人来说&#xff0c;你可能也注意到了类似名称的葡萄酒&#xff0c;即灰皮诺和黑皮诺葡萄酒。这葡萄酒有什么区别&#xff1f;他们有任何相似之处吗&#xff1f;今天&#xff0c;我们将一探究竟&#xff01;让我们了解一…

Python设计模式之创建型-单例模式(Singleton)

目录 作用 适用场景 使用模块 使用装饰器 使用元类 __new__方法单例模式 总结 更多关于Python的相关技术点&#xff0c;敬请关注公众号&#xff1a;CTO Plus后续的发文&#xff0c;有问题欢迎后台留言交流。 注意&#xff1a;本代码示例环境Python版本使用最新的Python3…

网络安全缓冲区溢出实验

实验要求实验步骤函数 f00()函数 f01()函数 f02() 实验要求 C 程序 homework08.c 的主函数如下&#xff1a; int main(int argc, char * argv[]) { init_buf(Lbuffer, LEN);switch(argc) {case 1: f00(); break;case 2: f01(); break;case 3: f02(); break; default: f00(); …

STM32F407-14.3.13-01发生外部事件时清除 OCxREF 信号

发生外部事件时清除 OCxREF 信号 对于给定通道&#xff0c;在 ETRF⑧ 输入施加高电平&#xff08;相应 TIMx_CCMRx 寄存器中的 OCxCE⑦ 使能位置“1”&#xff09;&#xff0c;可使 OCxREF⑨ 信号变为低电平。OCxREF⑨ 信号将保持低电平&#xff0c;直到发生下一更新事件 (UEV)…

LT8668SXC HDMI转edp1.4/VBO 最高支持8k60hz

HDMI2.1 Receiver ▪ Compliant with HDMI2.1, HDMI2.0b, HDMI1.4 and DVI1.0 ▪ Data rate up to 8Gbps ▪ Support HDCP 1.4/2.3 ▪ Support HDCP repeater ▪ Support RGB 8/10/12 bpc, YCbCr4:4:4/ YCbCr4:2:2/ YCbCr4:2:0 /8/10/12 bpc ▪ Support up to 8K3…

【电路笔记】-电位差

电位差 文章目录 电位差1、概述2、电位差示例13、分压网络4、电位差示例2 电路中任意两点之间的电压差称为电位差&#xff0c;正是这种电位差使电流流动。 1、概述 与以电荷形式围绕闭合电路流动的电流不同&#xff0c;施加的电势差不会移动或流动。 两点之间产生的电势差的单…

生成测试数据的4种方法、5种工具介绍

在软件测试中&#xff0c;测试数据是测试用例的基础&#xff0c;对测试结果的准确性和全面性有着至关重要的影响。 因此&#xff0c;在进行软件测试时&#xff0c;需要生成测试数据以满足测试场景和要求。本文将介绍什么情况下需要生成测试数据&#xff0c;如何生成测试数据&a…

MOS管加三个元件就组成BUCK电路,为何说难点在于电感?

只要是电子产品就需要供电&#xff0c;就离不开电源&#xff0c;那什么是电源&#xff1a;小到手表中的电子&#xff0c;遥控器的电源&#xff0c;大到220V家庭用电&#xff0c;都可以看做是电源。然而在我们的电路设计中&#xff0c;会用到各种芯片&#xff0c;各种芯片所需要…

【算法问题】N 皇后问题

目录 1.问题定义2.思路分析2.1.基于数组的回溯2.2.基于集合的回溯2.3.基于位运算的回溯 3.代码实现 (Java)3.1.基于数组的回溯3.2.基于数组的回溯3.3.基于位运算的回溯 4.扩展 参考&#xff1a;52.N 皇后 II 1.问题定义 &#xff08;1&#xff09;在国际象棋的规则中&#xff…