diff --git a/README.md b/README.md index 5788d48..6306df4 100644 --- a/README.md +++ b/README.md @@ -68,13 +68,13 @@ spring-cloud:Finchley.SR2 | samples | 描述 | 官方文档 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [spring-cloud-Eureka](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-eureka) | eureka 服务的注册和发现 | [Service Discovery: Eureka Server](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-eureka-server.html) | -| [spring-cloud-Eureka-cluster](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-eureka-cluster) | eureka 高可用集群搭建 | [Service Discovery: Eureka Server](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-eureka-server.html) | -| [spring-cloud-Ribbon](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-ribbon) | ribbon客户端负载均衡 | [Client Side Load Balancer: Ribbon](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-ribbon.html) | -| [spring-cloud-OpenFeign](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-feign) | openfeign 声明式服务调用 | [Declarative REST Client: Feign](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-feign.html) | -| [spring-cloud-Hystrix](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-hystrix) | hystix 服务容错保护
hystrix dashboard 断路器监控
turbine 断路器聚合监控 | [Circuit Breaker: Hystrix Clients](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi__circuit_breaker_hystrix_clients.html)
[Hystrix metrics aggregation with Turbine ](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-consul-turbine.html) | +| [spring-cloud-eureka](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-eureka) | eureka 服务的注册和发现 | [Service Discovery: Eureka Server](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-eureka-server.html) | +| [spring-cloud-eureka-cluster](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-eureka-cluster) | eureka 高可用集群搭建 | [Service Discovery: Eureka Server](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-eureka-server.html) | +| [spring-cloud-ribbon](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-ribbon) | ribbon客户端负载均衡 | [Client Side Load Balancer: Ribbon](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-ribbon.html) | +| [spring-cloud-openFeign](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-feign) | openfeign 声明式服务调用 | [Declarative REST Client: Feign](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-feign.html) | +| [spring-cloud-hystrix](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-hystrix) | hystix 服务容错保护
hystrix dashboard 断路器监控
turbine 断路器聚合监控 | [Circuit Breaker: Hystrix Clients](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi__circuit_breaker_hystrix_clients.html)
[Hystrix metrics aggregation with Turbine ](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi_spring-cloud-consul-turbine.html) | | [spring-cloud-zuul](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-zuul) | zuul 网关服务 | [Router and Filter: Zuul](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi__router_and_filter_zuul.html) | -| [spring-cloud-sleuth-Zipkin](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-sleuth-zipkin) | sleuth 分布式系统服务追踪 | [Spring Cloud Sleuth](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi__introduction.html#sleuth-adding-project) | +| [spring-cloud-sleuth-zipkin](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-sleuth-zipkin) | sleuth 分布式系统服务追踪 | [Spring Cloud Sleuth](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi__introduction.html#sleuth-adding-project) | | [spring-cloud-config-bus](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-config) | config 分布式配置中心
bus消息总线 实现配置热更新 | [Spring Cloud Config Client](https://cloud.spring.io/spring-cloud-static/Finchley.SR2/multi/multi__spring_cloud_config_client.html) | | [spring-cloud-stream](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-cloud/spring-cloud-stream) | stream 对消息服务的抽象整合 | [spring-cloud-stream](http://cloud.spring.io/spring-cloud-stream/single/spring-cloud-stream.html) | diff --git a/pictures/SCSt-with-binder.png b/pictures/SCSt-with-binder.png new file mode 100644 index 0000000..b4d66fd Binary files /dev/null and b/pictures/SCSt-with-binder.png differ diff --git a/pictures/spring-cloud-stream.png b/pictures/spring-cloud-stream.png new file mode 100644 index 0000000..09ab529 Binary files /dev/null and b/pictures/spring-cloud-stream.png differ diff --git a/spring-cloud/spring-cloud-stream/pom.xml b/spring-cloud/spring-cloud-stream/pom.xml deleted file mode 100644 index 01f606d..0000000 --- a/spring-cloud/spring-cloud-stream/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.0.8.RELEASE - - - com.heibaiying.stream - spring-cloud-stream - 0.0.1-SNAPSHOT - spring-cloud-stream - spring cloud stream project for Spring Boot - - - 1.8 - Finchley.SR2 - - - - - - org.springframework.boot - spring-boot-starter-amqp - - - org.springframework.cloud - spring-cloud-starter-stream-rabbit - - - org.springframework.boot - spring-boot-starter-web - - - - org.projectlombok - lombok - true - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - - org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud.version} - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - diff --git a/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/SpringCloudStreamApplication.java b/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/SpringCloudStreamApplication.java deleted file mode 100644 index 7addbf5..0000000 --- a/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/SpringCloudStreamApplication.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.heibaiying.stream; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class SpringCloudStreamApplication { - - public static void main(String[] args) { - SpringApplication.run(SpringCloudStreamApplication.class, args); - } - -} - diff --git a/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/bean/Programmer.java b/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/bean/Programmer.java deleted file mode 100644 index 892da29..0000000 --- a/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/bean/Programmer.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.heibaiying.stream.bean; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; -import java.util.Date; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class Programmer implements Serializable { - - private String name; - - private int age; - - private float salary; - - private Date birthday; -} diff --git a/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/controller/MessageController.java b/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/controller/MessageController.java deleted file mode 100644 index 1a4d671..0000000 --- a/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/controller/MessageController.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.heibaiying.stream.controller; - -import com.heibaiying.stream.bean.Programmer; -import com.heibaiying.stream.stream.CustomStream; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.messaging.Message; -import org.springframework.messaging.MessageHeaders; -import org.springframework.messaging.support.MessageBuilder; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -/** - * @author : heibaiying - * @description : 发送测试消息 - */ -@RestController -public class MessageController { - - @Autowired - private CustomStream customStream; - - /*** - * 1、发送简单消息 - */ - @RequestMapping("sendSimpleMessage") - public void sendSimpleMessage() { - customStream.input().send(MessageBuilder.withPayload("hello spring cloud stream").build()); - } - - - /*** - * 2、发送消息体为对象的消息 - */ - @RequestMapping("sendObject") - public void sendObject() { - Programmer programmer=new Programmer("pro",12,212.2f,new Date()); - customStream.input().send(MessageBuilder.withPayload(programmer).build()); - } - - /** - * 3、发送带有消息头的消息 - */ - @RequestMapping("sendWithHeads") - public void sendWithHeads() { - Programmer programmer=new Programmer("pro",12,212.2f,new Date()); - Map map=new HashMap<>(); - map.put("code","868686"); - MessageHeaders messageHeaders=new MessageHeaders(map); - Message message= MessageBuilder.createMessage(programmer,messageHeaders); - customStream.input().send(message); - } - - /** - * 4、条件消息 可以看做是消息路由键的一种实现 - */ - @RequestMapping("sendWithKey") - public void sendWithKey() { - // 创建消息头key 为 01 的消息 - Programmer programmer=new Programmer("key01",12,212.2f,new Date()); - Map map=new HashMap<>(); - map.put("key","01"); - MessageHeaders messageHeaders=new MessageHeaders(map); - Message message= MessageBuilder.createMessage(programmer,messageHeaders); - customStream.input().send(message); - - // 创建消息头key 为 02 的消息 - programmer.setName("key02"); - map.put("key","02"); - MessageHeaders messageHeaders02=new MessageHeaders(map); - Message message02= MessageBuilder.createMessage(programmer,messageHeaders02); - customStream.input().send(message02); - } - - /** - * 5、消息转发 - */ - @RequestMapping("forward") - public void forward(){ - customStream.input().send(MessageBuilder.withPayload("hello spring cloud stream").build()); - } - - /** - * 5、直接往output发消息 - */ - @RequestMapping("toOutPut") - public void toOutPut(){ - customStream.output().send(MessageBuilder.withPayload("direct to output channel").build()); - } -} diff --git a/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/stream/CustomStream.java b/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/stream/CustomStream.java deleted file mode 100644 index 1224468..0000000 --- a/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/stream/CustomStream.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.heibaiying.stream.stream; - -import org.springframework.cloud.stream.annotation.Input; -import org.springframework.cloud.stream.annotation.Output; -import org.springframework.messaging.MessageChannel; -import org.springframework.messaging.SubscribableChannel; - -/** - * @author : heibaiying - */ -public interface CustomStream { - - String INPUT = "customInput"; - String OUTPUT = "customOutput"; - - @Input(CustomStream.INPUT) - SubscribableChannel input(); - - @Output(CustomStream.OUTPUT) - MessageChannel output(); - -} diff --git a/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/stream/StreamReceived.java b/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/stream/StreamReceived.java deleted file mode 100644 index 759f4f4..0000000 --- a/spring-cloud/spring-cloud-stream/src/main/java/com/heibaiying/stream/stream/StreamReceived.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.heibaiying.stream.stream; - -import com.heibaiying.stream.bean.Programmer; -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.Header; -import org.springframework.messaging.handler.annotation.Headers; -import org.springframework.messaging.handler.annotation.Payload; -import org.springframework.messaging.handler.annotation.SendTo; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author : heibaiying - * @description :消息的监听 - * 注意: 测试这个类的时候需要注释掉不必要的监听,因为对同一个通道存在多个监听,任何一个通道都不能存在返回值(如果有返回值应该指定出站目标) 我们下面的forward消息转发的方法是有返回值的 - * 否则会抛出异常: IllegalArgumentException: If multiple @StreamListener methods are listening to the same binding target, none of them may return a value - */ - -@Component -@EnableBinding(CustomStream.class) -@Slf4j -public class StreamReceived { - - @StreamListener(value = CustomStream.INPUT) - public void simple(Object payload) { - log.info("收到简单消息: {}", payload); - } - - @StreamListener(value = CustomStream.INPUT) - public void object(Programmer programmer) { - log.info("收到对象消息: {}", programmer); - } - - /* - * 用 @Header 监听时候需要注意,指定名称的属性必须在消息头中存在 不然就会抛出异常 MessageHandlingException: Missing header 'XXXX' for method parameter type [class java.lang.String] - */ - @StreamListener(value = CustomStream.INPUT) - public void heads(@Payload Programmer programmer, @Headers Map map, @Header(name = "code") String code) { - log.info("收到对象消息: {}", programmer); - map.forEach((key, value) -> { - log.info("消息头{}的值为{}", key, value); - }); - log.info("绑定指定消息头: code = {}", code); - } - - - /* - * 监听消息头key = 01 的消息 - */ - @StreamListener(target = CustomStream.INPUT, condition = "headers['key']=='01'") - public void key01(@Payload Programmer programmer) { - log.info("key01 监听器接收到消息: {}", programmer.getName()); - } - - /* - * 监听消息头key = 02 的消息 - */ - @StreamListener(target = CustomStream.INPUT, condition = "headers['key']=='01'") - public void key02(@Payload Programmer programmer) { - log.info("key02 监听器接收到消息: {}", programmer.getName()); - } - - /** - * 消息转发 - */ - @StreamListener(target = CustomStream.INPUT) - @SendTo(CustomStream.OUTPUT) - public String forward(String payload){ - log.info("input forward: {}",payload); - return "forward "+payload; - } - - @StreamListener(target = CustomStream.OUTPUT) - public void outSimpleListen(String payload){ - log.info("output 收到简单消息: {}", payload); - } - -} diff --git a/spring-cloud/spring-cloud-stream/src/main/resources/application.yml b/spring-cloud/spring-cloud-stream/src/main/resources/application.yml deleted file mode 100644 index 7858ee9..0000000 --- a/spring-cloud/spring-cloud-stream/src/main/resources/application.yml +++ /dev/null @@ -1,15 +0,0 @@ -spring: - rabbitmq: - host: localhost - port: 5672 - username: guest - password: guest - # 指定消息的分组 默认交换机的类型是topic,发送消息是广播的方式, - # 所有客户端都会受到消息,指定分组后只有一个客户端可以接收到消息 - cloud: - stream: - bindings: - # 和我们在接口中声明消息名称的保持一致 - customInput: - # 分组名称任意填写即可 - group: gro diff --git a/spring-cloud/spring-cloud-stream/src/test/java/com/heibaiying/stream/SpringCloudStreamApplicationTests.java b/spring-cloud/spring-cloud-stream/src/test/java/com/heibaiying/stream/SpringCloudStreamApplicationTests.java deleted file mode 100644 index 2efa878..0000000 --- a/spring-cloud/spring-cloud-stream/src/test/java/com/heibaiying/stream/SpringCloudStreamApplicationTests.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.heibaiying.stream; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class SpringCloudStreamApplicationTests { - - @Test - public void contextLoads() { - } - -} -