springcloud 入门(8) springcloud Stream(上)

简介: springcloud 入门(8) springcloud Stream

文章目录

项目版本

1、jdk:1.8

2、springboot 2.1.6.RELEASE ,springcloud Greenwich.SR6

介绍

在系统开发里面难免用到消息队列,但各个的消息队列又有所区别,SpringCloudStream 的 作用就是屏蔽各种消息队列的区别,对消息队列的 API进行进一步的抽象,使得在springcloud 里面能更加方便的集成各种消息系统。通过使用springcloud Stream ,可以有效简化开发人员对消息中间件的使用复杂程度,让系统开发人员能够有更多精力去关注核心业务逻辑的处理。目前springcloud Stream只支持两大著名的消息中间件,rabbitmq 和 kafka。

Spring Cloud Stream 应用模型

Spring Cloud Stream 应用程序由一个中间件中立的核心组成。 应用程序通过在外部代理公开的目标和代码中的输入/输出参数之间建立绑定来与外部世界进行通信。 建立绑定所需的代理特定细节由特定于中间件的 Binder 实现处理。

以下图片来自官方

image.png

入门使用

消息生产者

这里使用rabbit作为消息中间件,自行安装rabbitmq

1、新建一个cloud-stream-provider,添加依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>

2、创建消息消费者类

@EnableBinding(Sink.class)
public class SinkReceiver {
    @StreamListener(Sink.INPUT)
    public void receive(Object receivedMessage){
        System.out.println("receivedMessage="+receivedMessage);
    }
}

3、启动CloudStreamProviderApplication

启动之后登录rabbitmq后台http://localhost:15672/,使用默认账号密码guest登录

connections一栏能看到我们的连接

image.png

点击127.0.0.1:50433可以查看connection详情

image.png

再点击127.0.0.1:5672 (1)可以查看Channel详情

image.png

点击input.anonymous.leanfVQMRM-6dPfz1XIkCw 就能查看到具体的队列详情

image.png

下拉有个Publish message,在这里就可以发布数据

image.png

发布完之后就能在控制台看到发布的数据了

image.png

怎么知道这个队列input.anonymous.leanfVQMRM-6dPfz1XIkCw一定是启动的那个呢

其实在启动的时候默认就给我们分配了一个,查看控制台信息可以看到

image.png

Stream尝鲜完成了,接下来是个简单入门使用

1、创建一个消息生产者类

@EnableBinding(Source.class)
public class SourceProvider {
    @Resource
    @Qualifier("output")
    private MessageChannel messageChannel;
    public void send(Object sendMessage){
        messageChannel.send(MessageBuilder.withPayload(sendMessage).build());
    }
}

2、修改配置文件

server.port=8301
spring.application.name=cloud-stream-provider
#消息组件类型 rabbitmq1为自定义的rabbitmq实例名称,如果有多个消息队列实例的话可以参照下面这样
# type:消息中间件类型
spring.cloud.stream.binders.rabbitmq1.type=rabbit
spring.cloud.stream.binders.rabbitmq1.environment.spring.rabbitmq.host=localhost
spring.cloud.stream.binders.rabbitmq1.environment.spring.rabbitmq.username=guest
spring.cloud.stream.binders.rabbitmq1.environment.spring.rabbitmq.password=guest
spring.cloud.stream.binders.rabbitmq1.environment.spring.rabbitmq.port=5672
spring.cloud.stream.binders.rabbitmq1.environment.spring.rabbitmq.virtual-host=/
# 实例2
#spring.cloud.stream.binders.rabbitmq2.type=rabbit
#spring.cloud.stream.binders.rabbitmq2.environment.spring.rabbitmq.host=localhost
#spring.cloud.stream.binders.rabbitmq2.environment.spring.rabbitmq.username=guest
#spring.cloud.stream.binders.rabbitmq2.environment.spring.rabbitmq.password=guest
#spring.cloud.stream.binders.rabbitmq2.environment.spring.rabbitmq.port=5672
# 要使用的 Exchange 名称
spring.cloud.stream.bindings.output.destination=streamExchange
#设置消息类型
spring.cloud.stream.bindings.output.content-type=application/json
#要绑定的消息服务的实例名
spring.cloud.stream.bindings.output.binder=rabbitmq1

3、创建测试类用于发送消息

@RunWith(SpringRunner.class)
@SpringBootTest(classes = CloudStreamProviderApplication.class)
public class CloudStreamProviderTest{
    @Autowired
    private SourceProvider sourceProvider;
    @Test
    public void test(){
        sourceProvider.send("hello,this is first message");
    }
}

只有生产者没有消费者是没用的,接下来创建消费者

消息消费者

1、新建一个stream-consumer,添加依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>

2、创建消息接收类SinkReceiver

@EnableBinding(Sink.class)
public class SinkReceiver {
    @StreamListener(Sink.INPUT)
    public void receive(Message<?> receivedMessage){
        System.out.println("receivedMessage="+receivedMessage.getPayload());
    }
}

3、修改配置文件

server.port=8401
spring.application.name=cloud-stream-consumer
#消息组件类型 rabbitmq1为自定义的rabbitmq实例名称,如果有多个消息队列实例的话可以参照下面这样
# type:消息中间件类型
spring.cloud.stream.binders.rabbitmq1.type=rabbit
spring.cloud.stream.binders.rabbitmq1.environment.spring.rabbitmq.host=localhost
spring.cloud.stream.binders.rabbitmq1.environment.spring.rabbitmq.username=guest
spring.cloud.stream.binders.rabbitmq1.environment.spring.rabbitmq.password=guest
spring.cloud.stream.binders.rabbitmq1.environment.spring.rabbitmq.port=5672
# 要使用的 Exchange 名称 ,input是rabbitmq的channel名称,后面可以自定义
spring.cloud.stream.bindings.input.destination=streamExchange
#设置消息类型
spring.cloud.stream.bindings.input.content-type=application/json
#要绑定的消息服务的实例名
spring.cloud.stream.bindings.input.binder=rabbitmq1

启动CloudStreamConsumerApplication,可以看到rabbitmq首页下方有一个消费者

image.png

调用CloudStreamProviderTest#test,查看stream-consumer控制台,会发现收到一条消息

receivedMessage=hello,this is first message
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
21天前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
|
2月前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
1月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
286 7
|
2月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
47 6
|
2月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
190 5
|
2月前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
78 5
|
2月前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
56 5
|
4月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
4月前
|
负载均衡 Java API
【Spring Cloud生态】Spring Cloud Gateway基本配置
【Spring Cloud生态】Spring Cloud Gateway基本配置
76 0
|
6月前
|
Java Spring
【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.
【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.