Spring Cloud Stream
Spring Cloud Stream是Spring Cloud的组件之一,是一个为微服务应用构建消息驱动能力的框架。

1、导入引用
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
2、定义接口
public interface StreamClient {
    String INPUT = "input";
    String OUTPUT = "output";
    @Input(INPUT)
    SubscribableChannel input();
    @Output(OUTPUT)
    MessageChannel output();
}
3、定义消息的接收
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component; @Component
@EnableBinding(StreamClient.class)
@Slf4j
public class StreamReceiver { @StreamListener(StreamClient.INPUT)
@SendTo(StreamClient.OUTPUT)
public Object processInput(String message){
log.info("Input StreamReceiver:{}", message );
return message;
} @StreamListener(StreamClient.OUTPUT)
public void processOutPut(String message){
log.info("Output StreamReceiver:{}", message );
} }
4、定义消息的发送
@RestController
public class SendMessageController { @Autowired
private StreamClient streamClient; @GetMapping("/sendMessage")
public void process(){
String msg = "hello world";
streamClient.output().send(MessageBuilder.withPayload(msg).build());
} }
5. 结果

6、发送对象
1) 发送者
/**
* 发送对象
*/
@GetMapping("/sendMessage2")
public void process2(){
OrderDTO orderDTO = new OrderDTO();
orderDTO.setOrderId("123");
streamClient.output().send(MessageBuilder.withPayload(orderDTO).build());
}
2)接收者
@StreamListener(StreamClient.OUTPUT)
public void processOutPut(OrderDTO message){
log.info("Output StreamReceiver:{}", message.toString() );
}
7、消息接收到后,再回复消息。使用SendTo
@StreamListener(StreamClient.INPUT)
@SendTo(StreamClient.OUTPUT) //当Input接收到消息后,回复消息给Output
public Object processInput(String message){
log.info("Input StreamReceiver:{}", message );
return message;
}
Spring Cloud Stream的更多相关文章
- Spring Cloud Stream同一通道根据消息内容分发不同的消费逻辑
		应用场景 有的时候,我们对于同一通道中的消息处理,会通过判断头信息或者消息内容来做一些差异化处理,比如:可能在消息头信息中带入消息版本号,然后通过if判断来执行不同的处理逻辑,其代码结构可能是这样的: ... 
- Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)
		应用场景 之前我们已经通过<Spring Cloud Stream消费失败后的处理策略(一):自动重试>一文介绍了Spring Cloud Stream默认的消息重试功能.本文将介绍Rab ... 
- Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
		应用场景 前两天我们已经介绍了两种Spring Cloud Stream对消息失败的处理策略: 自动重试:对于一些因环境原因(如:网络抖动等不稳定因素)引发的问题可以起到比较好的作用,提高消息处理的成 ... 
- Spring Cloud Stream消费失败后的处理策略(二):自定义错误处理逻辑
		应用场景 上一篇<Spring Cloud Stream消费失败后的处理策略(一):自动重试>介绍了默认就会生效的消息重试功能.对于一些因环境原因.网络抖动等不稳定因素引发的问题可以起到比 ... 
- Spring Cloud Stream消费失败后的处理策略(一):自动重试
		之前写了几篇关于Spring Cloud Stream使用中的常见问题,比如: 如何处理消息重复消费 如何消费自己生产的消息 下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式.不过不论 ... 
- Spring Cloud Stream如何消费自己生产的消息?
		在上一篇<Spring Cloud Stream如何处理消息重复消费>中,我们通过消费组的配置解决了多实例部署情况下消息重复消费这一入门时的常见问题.本文将继续说说在另外一个被经常问到的问 ... 
- Spring Cloud Stream如何处理消息重复消费?
		最近收到好几个类似的问题:使用Spring Cloud Stream操作RabbitMQ或Kafka的时候,出现消息重复消费的问题.通过沟通与排查下来主要还是用户对消费组的认识不够.其实,在之前的博文 ... 
- 使用 Spring Cloud Stream 构建消息驱动微服务
		相关源码: spring cloud demo 微服务的目的: 松耦合 事件驱动的优势:高度解耦 Spring Cloud Stream 的几个概念 Spring Cloud Stream is a ... 
- Kafka及Spring Cloud Stream
		安装 下载kafka http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz kafka最为重要三个配置依次为:broke ... 
随机推荐
- Spring Boot项目中使用Swagger2
			Swagger2是一款restful接口文档在线生成和在线接口调试工具,Swagger2在Swagger1.x版本的基础上做了些改进,下面是在一个Spring Boot项目中引入Swagger2的简要 ... 
- python基础之socket与socketserver
			---引入 Socket的英文原义是“孔”或“插座”,在Unix的进程通信机制中又称为‘套接字’.套接字实际上并不复杂,它是由一个ip地址以及一个端口号组成.Socket正如其英文原意那样,像一个多孔 ... 
- 【转载】  强化学习(二)马尔科夫决策过程(MDP)
			原文地址: https://www.cnblogs.com/pinard/p/9426283.html ------------------------------------------------ ... 
- 【leetcode】69-Sqrt(x)
			problem Sqrt(x) code class Solution { public: int mySqrt(int x) {// x/b=b long long res = x;// while ... 
- MySQL篇,第三章:数据库知识3
			MySQL 数据库 3 索引 1.普通索引(MUL) 2.唯一索引(UNI) 3.主键索引(PRI) 1.使用规则 1.一个表中只能有一个主键(primary)字段 2.对应字段的值不允许重复 ... 
- C#正则表达式语法教程
			C#语法之正则 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心创新!助力 ... 
- day 016 面向对象---类与类的关系
			---恢复内容开始--- 一 依赖关系(最轻的一种关系,在方法中引入另一个类的对象) class Elephant: def __init__(self,name): self.name=name ... 
- java poi解析excel报错处理
			org.apache.xmlbeans.SchemaTypeLoaderException: XML-BEANS compiled schema: Incompatible minor version ... 
- Django模型层之多表操作
			----------------https://www.cnblogs.com/liuqingzheng/articles/9499252.html 实例:我们来假定下面这些概念,字段和关系 一 创建 ... 
- poj 2155 B - Matrix 二维树状数组
			#include<iostream> #include<string> #include<string.h> #include<cstdio> usin ... 
