spring cloud stream rabbit 4.0示例

参考链接

疑问

这里配置生产者、消费者 每一个都需要在yml配置,看起来很复杂,不知道有没有简单的配置方法

pom 添加依赖

方式一

复制代码
<!--cloud rabbitMq 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
            <version>4.1.0</version>
        </dependency>

方式二

复制代码
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-stream-rabbit -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    <version>4.1.0</version>
</dependency>

yml 配置文件

rabbitmq 配置

复制代码
spring:
  cloud:
    stream:
      binders:
        rabbit:
          type: rabbit
          environment: #配置rabbitmq连接环境
            spring:
              rabbitmq:
                host: ip
                username: admin
                password: admin
                virtual-host: my_vhost

这里我把生产者 消费者放在一个项目测试,可以在不同想目放生产者、消费者

消费者 配置

复制代码
spring:
  cloud:
    stream:
      bindings:
        # in 消费者
        test-in-0:
          content-type: application/json
          destination: test-destination
          group: test-group
          binder: rabbit
        test1-in-0:
          content-type: application/json
          destination: test1-destination
          group: test1-group
          binder: rabbit
        test2-in-0:
          content-type: application/json
          destination: test2-destination
          group: test2-group  # 队列
          binder: rabbit
    function:
      definition: test;test1;test2

消费者

复制代码
@Component
public class ConsumerTest {


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

    @Bean
    public Consumer<String> test1() {
        return msg -> {
            System.out.println("Received: " + msg);
        };
    }

    @Bean
    public Consumer<Person> test2() {
        return msg -> {
            System.out.println("Received: " + msg);
        };
    }


}

public class Person {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String toString() {
        return this.name;
    }
}

启动后可以在 rabbitmq 控制台看到 生成的 topicqueue

配置生产者

yml

复制代码
spring:
  cloud:
    stream:
      bindings:
        # 生产者
        test-out-0:
          content-type: application/json
          destination: test-destination  # topic
          binder: rabbit
        test1-out-0:
          content-type: application/json
          destination: test1-destination
          binder: rabbit
        test2-out-0:
          content-type: application/json
          destination: test2-destination
          binder: rabbit

测试代码

复制代码
package com.example.demorabbit;

import lombok.RequiredArgsConstructor;
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
@RequiredArgsConstructor
public class ProducerController {

    private final StreamBridge streamBridge;


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

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

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

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

        return "发送成功";
    }
}

测试发送消息
http://localhost:5656/sendMsg?delay=10000&name=zhangsan

发送接收成功

相关推荐
野犬寒鸦12 分钟前
MyBatis-Plus 中使用 Wrapper 自定义 SQL
java·数据库·后端·sql·mybatis
我爱一条柴ya34 分钟前
【AI大模型】RAG系统组件:向量数据库(ChromaDB)
数据库·人工智能·pytorch·python·ai·ai编程
北北~Simple36 分钟前
第一次搭建数据库
服务器·前端·javascript·数据库
鸢想睡觉36 分钟前
【数据库基础 1】MySQL环境部署及基本操作
数据库·mysql
没有口袋啦37 分钟前
《数据库》MySQL备份回复
数据库
c7_ln41 分钟前
MYSQL C_API使用全解
c语言·数据库·mysql
karry013044 分钟前
高并发导致重复key问题--org.springframework.dao.DuplicateKeyException
java·数据库·ide
经典19922 小时前
mysql 锁介绍
数据库·mysql
不太可爱的大白2 小时前
Mysql分片:一致性哈希算法
数据库·mysql·算法·哈希算法
~ 小团子2 小时前
每日一SQL 【游戏玩法分析 IV】
数据库·sql·游戏