随笔 - 441  文章 - 4  评论 - 84  阅读 - 109万 

为什么使用spring stream ?

 spring stream 是用来做消息队列发送消息使用的。他隔离了各种消息队列的区别,使用统一的编程模型来发送消息。

目前支持:

rabbitmq

kafka

rocketmq

启动rocketmq 

rocketmq 支持windows

start mqnamesrv.cmd

start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true

修改pom.xml

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rocketmq</artifactId>
        </dependency>

增加发送接收JAVA代码

复制代码
public interface InputOutput {

    String MAIL_OUTPUT = "mailOutput";
    String MAIL_INPUT = "mailInput";

    String OUTPUT = "output";
    String INPUT = "input";


    @Output(OUTPUT)
    MessageChannel output();
    @Input(INPUT)
    SubscribableChannel input();


    @Output(MAIL_OUTPUT)
    MessageChannel mailOutput();
    @Input(MAIL_INPUT)
    SubscribableChannel mailInput();


}
复制代码

在应用上增加注解

@EnableBinding({InputOutput.class})

增加yml配置

复制代码
spring:
    cloud:
        stream:
          rocketmq:
            binder:
              name-server: 127.0.0.1:9876
          bindings:
            output:
              destination: bpmmessage
              group: bpmmessage-group
    
            input:
              destination: bpmmessage
              group: bpmmessage-group-consumer
    
            mailOutput:
              destination: mail
              group: mail-group
    
            mailInput:
                destination: mail
                group: mail-group-consumer
复制代码

编写代码收发消息:

复制代码
MessageModel messageModel=new MessageModel();

        messageModel.setMsgType("mail");
        messageModel.setContent("helloworld");

        inputOutput.mailOutput().send( MessageBuilder.withPayload(
                "mail"
        ).build());

        inputOutput.output().send(
                MessageBuilder.withPayload(
                        messageModel
                ).build()
        );
复制代码

这里发送的是两类消息。

接收消息:

复制代码
@Service
public class MessageListener {

    @StreamListener(InputOutput.INPUT)
    public void receive(MessageModel message) {
        System.err.println(message);
        System.err.println("ok");
    }


    @StreamListener(InputOutput.MAIL_INPUT)
    public void receive(String message) {
        System.err.println(message);
        System.err.println("ok");
    }
}
复制代码

分别接收两类消息

 

 


 

posted on   自由港  阅读(1061)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2015-05-06 loadrunner 参数化数据更新方式
2015-05-06 Loadrunner 使用检查点
点击右上角即可分享
微信分享提示