关键词:
文章目录
- 1. SpringCloud Bus 之 消息总线 介绍
- 2. SpringCloud Bus 之 搭建RabbitMQ
- 3. SpringCloud Bus 之 动态刷新全局广播的设计思想和选型
- 4. SpringCloud Bus 之 动态刷新全局广播配置实现
- 5. SpringCloud Stream 之 消息驱动 介绍
- 6. SpringCloud Stream 之 设计思想
- 7. SpringCloud Stream 之 消息驱动 搭建生产者
- 8. SpringCloud Stream 之 消息驱动 搭建消费者
- 9. SpringCloud Stream 之 多台消费者重复消费的问题
- 10. SpringCloud Stream 之 消息持久化
- 10. SpringCloud Sleuth 之 分布式请求链路跟踪
- 11. SpringCloud Sleuth 之 zipkin搭建安装
- 11. SpringCloud Sleuth 之 链路监控展现
1. SpringCloud Bus 之 消息总线 介绍
SpringCloud Bus的作用:
- 分布式自动刷新配置功能。
- Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新。
Bus支持两种消息代理:RabbitMQ 和 Kafka
。
SpringCloud Bus介绍:
总线的概念:
2. SpringCloud Bus 之 搭建RabbitMQ
见:https://blog.csdn.net/IT_Holmes/article/details/124251437
3. SpringCloud Bus 之 动态刷新全局广播的设计思想和选型
第一种:利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置。
- 先发给某台客户端,之后由客户端传染给其他客户端,进而刷新所有客户端配置。
第二种:利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置。 (推荐使用!)
4. SpringCloud Bus 之 动态刷新全局广播配置实现
第一步:创建项目,安装依赖。(直接使用之前已经创建好的config server也是可以的!)
<!--添加rabbitmq支持的bus-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<!--springcloud config配置中心的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!--添加eureka-client客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.itholmes.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>$project.version</version>
</dependency>
第二步:修改application.yml配置文件。
- 服务端配置文件:
server:
port: 3344
spring:
application:
name: cloud-config-center # 微服务名称
cloud:
config:
server:
git:
uri: https://gitee.com/lixiaogou/sprincloud-config.git #GitHub上面的git仓库名字
search-paths: #搜索目录
- springcloud-config
label: master #读取分支
# rabbitmq相关配置
rabbitmq:
host: 127.0.0.1
password: 0818
username: admin
port: 5672
# 服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
# Rabbitmq相关配置,暴露bus刷新配置的端点
management:
endpoint: # 暴露bus刷新配置的端点
web:
exposure:
include: 'bus-refresh'
- 客户端配置文件:(bootstrap.yml)
server:
port: 3355
spring:
application:
name: config-client
cloud:
# SpringCloud Config 客户端配置
config:
label: master # 分支名称
name: config # 配置文件名称
profile: dev # 读取后缀名称
# 上述三个综合: master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
uri: http://localhost:3344 # 配置中心地址
# 服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
运维工程师得发布通知公式(刷新顶点通知):
- 下面得destination指得是:微服务名称:端口。
5. SpringCloud Stream 之 消息驱动 介绍
SpringCloud Stream是一个构建消息驱动微服务的框架。
Stream消息驱动的作用:屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型。
Stream原理就是通过binder对象与消息中间件交互。
6. SpringCloud Stream 之 设计思想
通过定义绑定器Binder作为中间层,完美实现应用程序与消息中间件细节之间的隔离。
input对应生产者。
output对应消费者。
Stream的架构图如下:
Stream中的小心通信方式遵循了发布-订阅模式。
官方给出的理念架构理解:
Stream标准流的三个流程:
- Binder:连接中间件,屏蔽差异。
- Channel:通道,实现存储和转发的媒介,通过Channel对队列进行配置。
- Source和Sink:从Stream发布消息就是输出,接收消息就是输入。
7. SpringCloud Stream 之 消息驱动 搭建生产者
第一步:创建项目,配置依赖。
- 导入rabbit就导入stream-rabbit;导入kafka就导入stream-kafka。
<!--导入stream-rabbit-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<!--添加eureka-client客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.itholmes.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>$project.version</version>
</dependency>
第二步:配置yml文件。
- 要注意mq是本地还是云服务器。
server:
port: 8801
# 如果是使用的自己的服务器来配置,则需要修改配置文件,将rabbitmq的配置信息移动到application.yml中的spring节点下
spring:
application:
name: cloud-stream-provider
# 设置云服务器的mq
rabbitmq:
host: 150.158.199.52
port: 5672
username: "admin"
password: "0818"
cloud:
stream:
binders: # 在此处配置要绑定的rabbitmq的服务信息;
defaultRabbit: # 表示定义的名称,用于于binding整合
type: rabbit # 消息组件类型
# environment: # 设置本地rabbitmq的相关的环境配置
# spring:
# rabbitmq:
# host: localhost
# port: 5672
# username: guest
# password: guest
bindings: # 服务的整合处理
output: # 这个名字是一个通道的名称
destination: studyExchange # 表示要使用的Exchange名称定义
content-type: application/json # 设置消息类型,本次为json,文本则设置“text/plain”
binder: defaultRabbit # 设置要绑定的消息服务的具体设置
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://localhost:7001/eureka
# instance:
# lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认是30秒)
# lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒的间隔(默认是90秒)
# instance-id: send-8801.com # 在信息列表时显示主机名称
# prefer-ip-address: true # 访问的路径变为IP地址
第三步:搭建service层。
- 使用注解来配置,发送消息如下一样。
package com.itholmes.springcloud.service.impl;
import com.itholmes.springcloud.service.IMessageProvider;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;
import javax.annotation.Resource;
import java.util.UUID;
/**
* @author: itholmes
* @description:
* @EnableBinding注解: 指信道channel和exchange绑定在一起。
* Source.class的作用定义消息的推送管道。
* @date: 2022/8/3 22:52
*/
@EnableBinding(Source.class)
public class MessageProviderImpl implements IMessageProvider
// 消息发送管道
@Resource
private MessageChannel output;
@Override
public String send()
String serial = UUID.randomUUID().toString();
output.send(MessageBuilder.withPayload(serial).build());
System.out.println("*****serial:" + serial);
return null;
第四步:注入controller层。
package com.itholmes.springcloud.controller;
import com.itholmes.springcloud.service.IMessageProvider;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author: itholmes
* @description: TODO
* @date: 2022/8/3 23:02
*/
@RestController
public class SendMessageController
//直接注入进来就可以
@Resource
private IMessageProvider messageProvider;
@GetMapping(value = "/sendMessage")
public String sendMessage()
return messageProvider.send();
8. SpringCloud Stream 之 消息驱动 搭建消费者
第一步:创建项目,导入依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<!--添加eureka-client客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.itholmes.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>$project.version</version>
</dependency>
第二步:配置application.yml文件。
- 与上面不同的是,这里是input接受。
server:
port: 8802
# 如果是使用的自己的服务器来配置,则需要修改配置文件,将rabbitmq的配置信息移动到application.yml中的spring节点下
spring:
application:
name: cloud-stream-provider
rabbitmq:
host: 150.158.199.52
port: 5672
username: "admin"
password: "0818"
cloud:
stream:
binders: # 在此处配置要绑定的rabbitmq的服务信息;
defaultRabbit: # 表示定义的名称,用于于binding整合
type: rabbit # 消息组件类型
bindings: # 服务的整合处理
input: # 这个名字是一个通道的名称 , 这里是接受!!!
destination: studyExchange # 表示要使用的Exchange名称定义
content-type: application/json # 设置消息类型,本地为json,文本就是text/plain
binder: defaultRabbit # 设置要绑定的消息服务的具体设置
# 服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
instance:
lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认30秒)
lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒间隔(默认90秒)
instance-id: receive-8802.com # 在信息列表时显示主机名称
prefer-ip-address: true # 访问的路径变为IP地址
第三步:创建启动类,创建controller层Sink接受。
package com.itholmes.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
/**
* @description:
* 注解:&springcloud学习笔记总结(代码片段)
...动态路由7.Gateway之Predicate分类8.Gateway之Filter(GatewayFilter)9.SpringCloudConfig之分布式配置中心(介绍) 查看详情
springcloud学习笔记总结(代码片段)
文章目录1.OpenFeign之介绍2.OpenFeign之消费端的服务调用3.OpenFeign之超时控制4.OpenFeign之日志增强5.Hystrix之重要概念6.jmeter普通服务测试7.Hystrix之服务提供和服务消费环境搭建8.Hystrix之服务降级消费端和服务端9.Hystrix之全局服务降级... 查看详情
springcloud学习笔记总结(代码片段)
文章目录1.OpenFeign之介绍2.OpenFeign之消费端的服务调用3.OpenFeign之超时控制4.OpenFeign之日志增强5.Hystrix之重要概念6.jmeter普通服务测试7.Hystrix之服务提供和服务消费环境搭建8.Hystrix之服务降级消费端和服务端9.Hystrix之全局服务降级... 查看详情
springcloud学习笔记总结(代码片段)
文章目录1.Eureka之Eureka基础知识2.Eureka之EurekaServer服务端安装3.Eureka之将别的项目入驻进EurekaServer4.Eureka之搭建Eureka集群5.Eureka之搭建业务逻辑集群6.Eureka之actuator微服务信息完善7.Eureka之服务发现Discovery(重点)8.Eureka之自我保护9.Eurek... 查看详情
springcloud学习笔记总结(代码片段)
文章目录1.SpringCloudAlibaba简介2.SpringCloudAlibaba之Nacos介绍和安装3.Nacos服务注册与发现之服务提供者注册4.Nacos服务注册与发现之服务消费者注册和负载5.Nacos服务注册与发现之服务注册中心对比提升6.Nacos作为服务配置中心7.Nacos服务... 查看详情
springcloud学习笔记总结(代码片段)
文章目录1.zookeeper之支付服务注册(服务提供者注册)2.zookeeper之临时节点和持久节点3.zookeeper之服务消费者注册4.Consul之简介5.Consul之安装运行Consul6.Consul之服务提供者注册进consul7.Consul之服务消费者注册进Consul8.三个注册中心的异同... 查看详情
springcloud学习笔记总结(代码片段)
文章目录1.SpringCloudAlibaba之Sentinel(哨兵)概述2.Sentinel之下载安装3.Sentinel之初始化监控4.Sentinel之流控限流4.1流控规则名词解释4.2流控QPS直接失败4.3流控线程数直接失败4.4流控关联4.5流控预热4.6流控排队等待5.Sentinel之熔断降级5.1降... 查看详情
学习笔记springcloud微服务架构(代码片段)
文章目录@[toc]SpringCloud微服务架构一、认识微服务1.服务架构的演变1.1单体架构1.2分布式架构1.3服务治理1.4微服务1.5总结2.微服务技术对比2.1微服务架构2.2微服务技术对比2.3企业需求3.SpringCloud二、微服务拆分案例1.服务拆分1.1... 查看详情
springcloud学习总结(代码片段)
springcloud构建微服务项目步骤导入依赖编写配置文件开启这个功能@Enablexxx配置类于2023年2月24日下午17点38分开始学习于2023年3月17日晚上20点26分学完总结代码地址:https://gitee.com/liang-weihao/StudySpringcloud学习笔记地址:http... 查看详情
springcloud之学习笔记(feign+consul)(代码片段)
SpringCloud之学习笔记SpringCloud为开发者提供了快速构建分布式系统中一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。... 查看详情
springcloud学习笔记-p1(服务拆分&远程调用&eureka注册中心&ribbon负载均衡)(代码片段)
文章目录SpringCloud学习笔记-p11.初识微服务1-1单体架构1-2分布式架构1-3微服务1-4SpringCloud1-5总结2.服务拆分和远程调用2-1服务拆分原则2-2服务拆分示例准备数据库环境导入demo工程2-3实现远程调用案例案例需求注册RestTemplate实现远程... 查看详情
springcloud学习笔记day02——eureka(代码片段)
上一篇:springcloud学习笔记day01一、Eureka基础知识1、什么是服务治理?SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理。在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比... 查看详情
springcloud学习总结——服务熔断hystrix高级(代码片段)
案例准备用例spring_cloud_hystrix项目地址:传送门 我们知道,当请求失败,被拒绝,超时的时候,都会进入到降级方法中。但进入降级方法并不意味着断路器已经被打开。那么如何才能了解断路器中的状态呢?一、Hystrix的监控... 查看详情
springcloud学习笔记(代码片段)
微服务是什么?微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理... 查看详情
springcloud学习笔记(代码片段)
微服务是什么?微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理... 查看详情
springcloud学习笔记day01(代码片段)
1.技术要求:java8+mven+git、github+Nginx+RabbitMQ+SpringBoot2.02.JVM/JUC/JMM/GC/Nginx……2.微服务架构理论入门2.1.微服务架构概述什么是微服务?微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服... 查看详情
springcloud学习笔记day01(代码片段)
1.技术要求:java8+mven+git、github+Nginx+RabbitMQ+SpringBoot2.02.JVM/JUC/JMM/GC/Nginx……2.微服务架构理论入门2.1.微服务架构概述什么是微服务?微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服... 查看详情
总结学习springcloud系列之深入理解zuul(代码片段)
简介网关(gateway)是一种外部网络和内部网络服务之间的关卡,可以最先得到外部的请求,属于软件网卡。软件网卡主要有两个作用,一个是请求过滤,另一个是路由分发特点功能身份验证校验和安全限流动态路由... 查看详情