一、安装RocketMQ
详见该手记:http://www.imooc.com/article/290089
二、搭建RocketMQ控制台
详见该手记:http://www.imooc.com/article/290092
三、Spring消息编程模型01-编写生产者
1.导入依赖
2.添加配置
3.最后直接在代码中使用即可:
4.在调用了getMemberInfo接口后,可在RocketMQ控制台界面查看到该条信息:
四、Spring消息编程模型02-编写消费者
1.前两步和第三节一致,只不过在配置文件中不需要添加group信息;
2.编写代码,实现RocketMQListener类并重写onMessage方法即可,RocketMQListener携带的泛型为生产者推送的消息体;
五、分布式事务
1.流程剖析
2.概念术语
半消息:暂时无法消费的消息。生产者将消息发送到了MQ server,但这个消息会被标记为“暂不能投递”状态,先存储起来;消费者不会去消费这条消息。
消息回查:网络断开或生产者重启可能导致丢失事务消息的第二次确认。当MQ server发现消息长时间处于半消息状态时,将向消息生产者发送请求,询问该消息的最终状态(提交或回滚)。
3.消息状态
Commit:提交事务消息,消费者可以消费此消息;
Rollback:回滚事务消息,broker会删除该消息,消费者不能消费;
UNKNOWN:broker需要回查确认该消息的状态;
六、分布式事务-编码实现
1.修改发送消息方法为发送半消息:
2.接着创建一个类实现RocketMQLocalTransactionListener接口:
七、Spring Cloud Stream-编写生产者
Spring Cloud Stream 是一个构建消息驱动微服务的框架,对消息中间件的进一步封装,让开发人员使用的更加方便,马上开始使用教学:
1.添加依赖:
2.在启动类上添加注解:
3.添加配置文件:
4.到此Spring Cloud Stream就添加完成了,接下来学习如何使用Spring Cloud Stream作为生成者发送消息,以下为代码示例:
就是这么轻松,无感!
八、Spring Cloud Stream-编写消费者
1.添加依赖同第七节一致;
2.在启动类上添加注解,此时注解内参数为Sink.class:
3.添加配置文件:
4.到此消费者的添加就完成啦,接下来直接上代码示例:
就是这么轻松!
九、Spring Cloud Stream自定义接口-发送消息
1.自定义一个接口:
2.在启动类上加上该接口:
3.添加配置文件:
4.这样就创建好了自定义接口,接下来是代码示例如何使用自定义接口来发送消息:
可以发现,和默认的方式一致!
十、Spring Cloud Stream自定义接口-消费消息
1.自定义一个接口:
2.在启动类上加上该接口:
3.添加配置文件:
4.这样就创建好了自定义接口,接下来是代码示例如何使用自定义接口来消费消息:
自定义方式和默认方式其实一致,只是对应的参数修改即可;
十一、消息过滤:
通过消息过滤可以选择符合条件的消息,详见该手记:http://www.imooc.com/article/290424
十二、 Spring Cloud Stream的监控
可以通过actuator来监控,可以监控到bindings、channels和health;
十三、Spring Cloud Stream异常处理
详见该手记:http://www.imooc.com/article/290435
十四、Spring Cloud Stream + RocketMQ实现分布式事务-重构生产者
1.修改发送半消息方法:
2.添加配置文件:
其余的和第六节一致,但是这里有个小坑,因为stream发送消息时无法传送arg参数,所以arg只能放在header里面传送,这就导致事务监听器只能从header中获取arg,而这时获取的arg是字符串,如果进行强转会报错,所以博主认为在传送arg时可以先将arg转换为json字符串,在监听器中再将该json字符串转换为对应的实体类即可;
十五、 Spring Cloud Stream知识盘点【必看】
详见该手记:http://www.imooc.com/article/290489