Stream +nacos
Stream +nacos
一、消息队列
1、消息队列的作用
1)削峰填谷
2)应用解耦
3)异步处理
4)消息通讯
2、发送方式
1)点对点
2)发布-订阅模式
3、Kafka
中间是kafka的集群,包含多个broker,每一个broker相当于一个kafka的实例。Kafka消息不丢失的机制就是备份,kafka分区,会把一个主题划分多个文件。在访问定位时会比较快。每个broker会有leader和follower。
消费者组的概念,所有的consumer在一个组里面,消费者是一个集群,一个组里面的consumer去消费一个topic的消息,这样保证消息能消费一次。
4、rabitMQ
它和kafka有一定的区别,它是通过channel进行连接,和broker打交道。Broker里面有虚拟主机,通过EXchange绑定queue。
二、消息message
1、问题引出
在使用kafka和MQ时,耦合某个中间件的代码。如何解决耦合的问题,抽象。
2、Spring Message
统一了消息的编程模型,消息messaging 对应的模型包括一个消息体payload和消息头Header
消息通道MessageChannel用于接收消息,调用send方法,可以将消息发送至消息通道中。
消息通道里面的消息如何被消费呢?
它由消息通道的子接口进行订阅。
延伸了一些其它功能:
消息接收参数和返回值处理:消息接收参数处理器HandlerMethodArgumentResolver。配合@Header @Payload等注解使用;
消息接收后的返回值处理器HandlerMethodReturnValueHandler,配合
@sendTo注解使用。
消息体内容转换器:MessageConvert
统一抽象的消息发送模板AbstractMessageSendingTemplate
消息通道拦截器:ChannelInterceptor
三、Spring Integration
Spring Integration 提供了Spring编程模型的扩展用来支持企业集成模式,是对Spring Message的扩展。
功能 |
方法 |
消息的路由 |
MessageRoute |
消息的分发 |
MessageDispatcher |
消息的过滤 |
Filter |
消息的转换 |
Transformer |
消息的聚合 |
Aggregator |
消息的分割 |
Splitter |
四、Stream
1、定义及功能
Stream在Spring Integration的基础上进行了封装,提出来Binder,Binding,@EnableBinding,@StreamListener等概念。
Stream 与Spring Boot Actuator整合,提供了bindings、channels endpoint。
Stream 与 Spring Boot Externalized Configuration 整合,提供了BindingProperties、BinderProperties等外部化配置类。
Stream增强了消息发送失败和失败情况下的处理逻辑功能。
Stream它就是一步步演进过来的,是消息的流式框架,用于构建和共享消息,用于系统间的传递,满足我们高度可伸缩的事件驱动的微服务。
也有消息的订阅和发布,也存在消费组
组成 |
说明 |
Middleware |
中间件,支持RabbitMQ和kafka |
Binder |
是应用与消息中间件的封装,实现了RabbitMQ和kafka,通过Binder可以方便的连接中间件,可以动态改变消息类型(对应于kafka的topic和RabbitMQ的Exchange),通过配置文件可以实现。 |
@input |
注解标识输入通道,通过该输入通道接收到的消息进入应用程序。 |
@output |
注解标识输出通道,发布的消息将通过该通道离开应用程序。 |
@StreamListener |
监听队列,用于消费者的队列的接收 |
@EnableBinding |
指信道channel和exchange绑定在一起 |
2、Stream 的整体处理架构
帮我们屏蔽和某个具体的中间件的逻辑;如果换消息中间件,只需要修改配置文件就可以做到。
3、Stream 的例子
Kafka jdk1.8、Scala、zookeeper,安装完成就可以创建topic;
1)引入配置文件,通过配置文件可以切换用MQ或者kafka
2)配置文件,配置kafka的相关信息。
3)MessageSender类
4)BusinessOutputChannel类
5)在主方法使用注解@EnableBinding(BusinessOutputChannel.class),绑定消息通道的类
五、Nacos
1、产生场景
配置中心的产生,每次改配置都需要打包再上线,过程比较繁琐,有一个可以动态的管理端去配置,服务重启或者不重启就可以生效。Nacos保存了配置文件的一些信息。
2、命名空间的作用
用来做权限管理。新建一个角色,这个角色只能访问指定资源(命名空间)。
3、Nacos和springCloud如何集成?
4、Nacos使用场景
1)数据库连接信息的配置
2)限流规则
3)服务注册
@RefreshScope注解 不能加到主类上,通过这个注解实现动态刷新
5、Nacos是怎么实现动态刷新的
第一种方式是服务端给客户端推
第二种方式是拉。
NacosConfig的构造函数
看agent.start方法,把任务放到定时线程池里,定时刷新