IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Cloud Stream 消息驱动微服务 相关图形,dljd,cat - spring cloud alibaba,p153完成 -> 正文阅读

[Java知识库]Spring Cloud Stream 消息驱动微服务 相关图形,dljd,cat - spring cloud alibaba,p153完成

一 业务

  1. 多个微服务

二 需求

  1. 多个微服务之间需要通过消息中间件互相传递消息。
  2. 在面对不同的MQ产品(RabbitMQ、Kafka、RocketMQ)时,做到消息中间件和微服务的代码之间耦合性降到最低,甚至任意切换消息中间件而不用动微服务的代码。

三 解决方案

1 功能“集”:降低微服务和消息中间件的耦合性

2 “神”冰箱:spring cloud stream整合消息中间件(RabbitMQ、Kafka、RocketMQ)

四 完成学习

1 思想、思路

  1. 按照官方的定义,Spring Cloud Stream 是一个构建消息驱动微服务的框架
    1. ???????Spring Cloud Stream解决了开发人员无感知的使用消息中间件的问题。Spring Cloud Stream对消息中间件的进一步封装,可以做到代码层面对消息中间件的无感知,甚至于动态的切换中间件(rabbitmq切换为rocketmq或者kafka),使得微服务开发的高度解耦,服务可以关注更多自己的业务流程;
      1. String cloud stream对各个MQ产品(RabbitMQ、Kafka、RocketMQ)的连接和各种操作,做了一层高度的抽象。在String cloud stream的加持下,我们可任意选用某一种消息中间件而不用修改微服务的代码。
      2. 相当于ORM框架(hibernate、mybatis),对底层的多种数据库产品的连接和各种操作做了一层高度的抽象。在ORM框架的加持下,我们可任意选用某一种数据库而不用修改代码。? ?
  2. Spring Cloud Stream官方只支持rabbitmq 和 kafka,spring cloud alibaba新写了一个starter可以使Spring Cloud Stream支持RocketMQ; ??

2?体系组织

  1. spring cloud stream是spring cloud提供的一个子项目(或称? ?框架)。
  2. application core是我们写的微服务的代码,可以有多个application core,即有多个微服务。
    1. output:微服务发消息到消息中间件
    2. input:微服务接收消息中间件的消息。
  3. binder:绑定器
    1. spring cloud stream子项目(框架)给我们封装的东西叫binder。
    2. spring cloud stream封装的binder对微服务和消息中间件之间发消息和接消息的操作做了高度的抽象、封装。
    3. binder用于创建binding,从而绑定具体的消息中间件。
    4. 消息中间件都有自己的Binder实现;比如Kafka?的实现KafkaMessageChannelBinder,RabbitMQ的实现RabbitMessageChannelBinder以及RocketMQ?的实现?RocketMQMessageChannelBinder;

  4. binding
    1. 包括 Input Binding 和 Output Binding;

    2. Binding 在消息中间件与应用程序提供的 Provider 和 Consumer 之间提供了一个桥梁,实现了开发者只需使用应用程序的 Provider 或 Consumer 生产或消费数据即可,屏蔽了开发者与底层消息中间件的接触;

  5. 常用的消息中间件:kafka、rabbimq、rokectmq
  6. 开发过程中使用到的类、注解:

    组成

    说明

    Binder 绑定器(各个消息中间件的绑定器不同)

    Binder是应用与消息中间件之间的封装,目前实现了Kafka和RabbitMQ的Binder,通过Binder可以很方便的连接中间件,可以动态的改变消息类型(对应于Kafka的topic,RabbitMQ的exchange),这些都可以通过配置文件来实现;

    @Input 注解,表明是一个输入管道

    该注解标识输入通道,通过该输入通道接收消息进入应用程序

    @Output?注解,表明是一个输出管道

    该注解标识输出通道,发布的消息将通过该通道离开应用程序

    @StreamListener?注解

    监听队列,用于消费者的队列的消息接收

    @EnableBinding?注解,开启(Enable)绑定功能

    将信道channel和exchange、topic绑定在一起

五 配置应用

1 spring cloud stream + rocketmq的HelloWorld程序

  1. 第一步:新建springboot项目、pom.xml
    1. 第1步:引入spring cloud stream的起步依赖:?

      <dependency>
      ????<groupId>com.alibaba.cloud</groupId>
      ????<artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
      </dependency>

    2. 第2步:依赖父项目spring cloud alibaba,解决了spring cloud stream的起步依赖没有版本号从而不能引入的问题:
      <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>

  2. 第二步:application.properties配置文件

    ########## RocketMQ 通用配置
    # 配置绑定器binder连接某个消息中间件(由ip和port指定),高度抽象,用于屏蔽不同消息中间件之间的差异(相当于ORM框架中的hibernate和mybatis)
    spring.cloud.stream.rocketmq.binder.name-server=192.168.172.128:9876

    # 日志级别
    logging.level.com.alibaba.cloud.stream.binder.rocketmq=INFO

    ########## Consumer Config###? ?bindings是微服务与具体消息中间件沟通(发消息,收消息)的桥梁? ?#######
    # input 的配置:
    spring.cloud.stream.bindings.input.destination=test-topic
    spring.cloud.stream.bindings.input.content-type=text/plain
    spring.cloud.stream.bindings.input.group=test-group

    ########## Produce Config
    # output 的配置如下:
    spring.cloud.stream.bindings.output.destination=test-topic
    spring.cloud.stream.bindings.output.content-type=text/plain

    spring.cloud.stream.bindings.output.group=test-group

  3. 第三步:编码


自己理解:
关:【关联、对比】
疑:【疑问,如预习、工作疑问】
重:【,原理,流程,实现技术,工具】
难:【感想、体会、领悟】 ? 【总结、归纳、规律】
大道至简:提纲(系统化、宽度、至少是视频标题)图表短

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 10:59:34  更:2022-09-13 11:03:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:48:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码