springcloud stream
屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型。
通过定义绑定器作为中间层,实现了应用程序与消息中间件细节之间的隔离。rabbitmq和kafka
启动这四个服务和rabbitmq进行测试。
8801是消息发送方,8802和8803作为一组是消息接收方
测试结果:
当发送两次请求:http://localhost:8801/send
8801控制台输出
2021-05-29 10:46:38.575 INFO 1324 --- [nio-8801-exec-2] c.s.s.service.impl.MessageProviderImpl : send serial is: 7606b01c-05dc-4885-85b1-a78c6c0ecc99
2021-05-29 10:46:39.188 INFO 1324 --- [nio-8801-exec-3] c.s.s.service.impl.MessageProviderImpl : send serial is: 8100e2d4-f385-4d1d-9dcf-822a734001a0
8802控制台输出
2021-05-29 10:46:38.588 INFO 14636 --- [hange.shishiA-1] c.s.s.c.MessageReceiveController : 1 received serial is :7606b01c-05dc-4885-85b1-a78c6c0ecc99 port:8802
8803控制台输出
2021-05-29 10:46:39.200 INFO 1772 --- [hange.shishiA-1] c.s.s.c.MessageReceiveController : 2 received serial is :8100e2d4-f385-4d1d-9dcf-822a734001a0 port:8803
能看到分组为一组,消息不会重复发送。而且消息分组能实现消息持久化。
实现了消息持久化的验证:
关闭两个消费端,在8801发送四次。发送完成后再启动8802,能看到项目启动过程中,接受到了消息
rabbitmq分组shishiA有两个消费者:
代码见:
https://github.com/lulu4pix/springcloud/commit/8cc0b70d3423806a246d04609f6e51233ad5854c
#补充:
看到别人记的比较好的笔记就懒得写细节了:
https://blog.csdn.net/qq_31850627/article/details/108591358