文档章节

Spring Cloud Alibaba 实战(九) - Spring Cloud Stream

J
 JavaEdge
发布于 2019/12/10 01:20
字数 1014
阅读 72
收藏 0

1 定义

  • 一个用于构建消息驱动的微服务的框架 用人话说就是 : 致力于简化MQ通信的框架

2 编程模型

◆ Destination Binder (目标绑定器)

  • 与消息中间件通信的组件 ◆ Destination Bindings (目标绑定) Binding是连接应用程序跟消息中间件的桥梁,用于消息的消费和生产,由binder创建 ◆ Message(消息) 可见该编程模型异常强大,短短几行代码,就实现了消息的对接和处理 input/output就是微服务接收和发出消息

下面开始对内容中心编码

3 编写生产者

  • 添加依赖
  • 在启动类添加注解
  • 写配置

4 编写消费者

编码用户中心

  • 添加依赖
  • 启动类上添加注解
  • 写配置

5 自定义接口

5.1 发送消息

  • 新建mysource接口
  • 启动类注解
  • 写配置,注意要和接口中的名字一致
  • 测试代码 > 注意,由于mybatis会扫描启动类注解上scan注解所限制路径下的所有接口,所以一旦有接口未被xml mapper,即抛异常,所以编码时必须将扫描注解范围限定死在mapper包下!

5.2 消费消息

用户中心编码

  • 写接口
  • 添注解
  • 加配置

透过现象看本质

当我们定义好Source/Sink接口后,在启动类使用EnableBinding指定了接口后,就会使用IOC创建对应名字的代理类,所以配置文件中也必须同名

消息过滤

监控

记得多看端点哦! output/input其实就是一个channel

排错依据的重要端点

  • /actuator/bindings
  • /actuator/channels
  • /actuator/health

异常处理

整合RocketMQ实现分布式事务

Stream本身并未考虑分布式事务问题,都是RocketMQ的能力

重构生产者

对内容中心一顿操作:删除不必要代码

  • 自定义的MySource接口,因为Spring内置的就已经满足我们的需求了
  • 接着别忘了删除启动类中对他的引用
  • 删除TestController中对应测试代码
  • 清理yml中Spring消息编程模型整合RocketMQ的部分
  • myoutput删除
  • 修正如下

代码重构

改造ShareService

  • 即改造以下代码(直接删除)
  • 添加Source
  • 开始使用source发送消息,但是send只能直接发送消息(或者带有超时) 而我们之前使用rocketmqtemplate传递参数时可以带个arg 那现在我们该怎么传arg呢??? 记得前面埋下的伏笔,header也是很有用处的! 我们可以将要传的参数放入header中,如下: rocketmqtemplate功成身退,我们可以使用stream编程模型完全替代了

改造AddBonusTransactionListener

  • 现在这里的arg是null了
  • 需要从header中获取arg了(有坑,后面再说),在这里打个断点
  • 完善配置(IDEA无法识别,但确实会生效),实现事务功能
  • 注意上面的group名称要与下一致
  • 启动内容中心
  • 发送请求
  • 发现dto其实是字符串,并不是DTO对象
  • 所以继续修正代码
  • 这样就是正常的对象了 因为从header中获取的都是字符串哦!切记!

重构消费者

对用户中心删除不必要代码,与内容中心类似,不再详述

  • 删除
  • MyTestStreamConsumer改为AddBonusStreamConsumer

重构如下

总结

参考

© 著作权归作者所有

J
粉丝 0
博文 71
码字总数 188958
作品 0
南京
私信 提问
加载中

评论(0)

Spring Cloud for Alibaba 0.2.1 发布

Spring Cloud for Alibaba 0.2.1 已发布,更新亮点: Spring Cloud Alibaba 添加了两个新模块:spring-cloud-alibaba-schedulerx 和 spring-cloud-stream-binder-rocketmq。 为 spring-cloud......

王练
2018/12/22
2.6K
24
Spring Cloud for Alibaba 0.2.0 发布

The Spring Cloud Alibaba project, consisting of Alibaba’s open-source components and several Alibaba Cloud products, aims to implement and expose well known Spring Framework p......

淡漠悠然
2018/10/31
7
0
Spring Cloud Alibaba 新一代微服务解决方案 - 知乎

1、Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 马老师左手双十一,右手阿里开源组件...

我是程序员
2019/12/23
0
0
Spring Cloud Alibaba 新一代微服务解决方案

本篇是「跟我学 Spring Cloud Alibaba」系列的第一篇, 每期文章会在公众号「架构进化论」进行首发更新,欢迎关注。 1、Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的...

邴越
2019/12/20
0
0
厉害了,Spring Cloud for Alibaba 来了!

最近,Spring Cloud 发布了 Spring Cloud Alibaba 首个预览版本:Spring Cloud for Alibaba 0.2.0. 大家都好奇,这和阿里巴巴有什么关系?莫非是给阿里巴巴定制了一个 Spring Cloud ? 其实也...

Java技术栈
2018/11/22
1.1K
2

没有更多内容

加载失败,请刷新页面

加载更多

Linux - 登录警示信息

echo "\🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲🈲⛔️ UNAUTHORIZED ACCESS TO THIS DEVI...

wffger
33分钟前
56
0
Spring框架-第四篇

第一章: Spring 中的 JdbcTemplate 1.1-JdbcTemplate 概述 它是 spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。spring 框架为我们提供了很多 的操作模板类。 操作关系型...

IT原力比特
34分钟前
65
0
在GROUP BY中使用LIMIT获得每个组N个结果?

以下查询: SELECTyear, id, rateFROM hWHERE year BETWEEN 2000 AND 2009AND id IN (SELECT rid FROM table2)GROUP BY id, yearORDER BY id, rate DESC 产量: year id rate200......

javail
35分钟前
72
0
Mac上如何恢复被同名另一个文件替换的文件?

今天的文章是关于Mac上如何恢复被同名另一个文件替换的文件?在计算机上保存文件时,如果已经存在一个具有相同名称的文件,则可能会弹出。例如,“ XXX已经存在。您要替换它吗?” “是否要用...

麦克虾仔
37分钟前
59
0
Linux就该这么学 -- vim编辑器

vim编辑器是从vi编辑器扩展而来,更人性化 vim编辑器分为3种模式 1.命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。有时也被称为预览模式 2.输入模式:正常的文本录入 ...

jionzhao
41分钟前
72
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部