web后端-SpringCloud-Bus消息总线组件

简介: web后端-SpringCloud-Bus消息总线组件

N.1 Bus的介绍

1)当我们更新 GitHub 中的配置文件内容后, Config 客户端服务是否会及时更新的配置内容呢?

2)答:不会,我们需要更改后,然后重启项目,这样的话就比较麻烦,所以Bus可以解决这个问题。

N.2 Bus使用机制

1)Spring Cloud Bus 被国内很多都翻译为消息总线。大家可以将它理解为管理和传播所有分布式项目中的消息即可,其实本质是利用了MQ的广播机制在分布式的系统中传播消息,目前常用的有Kafka和RabbitMQ。利用Bus的机制可以做很多的事情,其中配置中心客户端刷新就是典型的应用场景之一,我们用一张图来描述Bus在配置中心使用的机制。

————————————————————————

————————————————————————

2)根据此图我们可以看出利用Spring Cloud Bus做配置更新的步骤:

(1)提交配置后发送post方式的/bus-refresh请求给Config客户端

(2)Config客户端接收到请求从Server端更新配置并且发送消息给消息总线

(3)消息总线接到消息并通知给其它客户端

(4)其它客户端接收到通知,请求Server端获取最新配置

(5)全部客户端均获取到最新的配置

3)RabbitMQ

(1)介绍

RabbitMQ采用AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议,RabbitMQ的broker由Exchange,Binding,queue组成

————————————————————————

————————————————————————

(2)Brokerr与Consume交互方式不同

RabbitMQ 采用push的方式

kafka采用pull的方式

N.3 Bus操作案例

N.3.1 安装RabbitMQ

1)因为我们采用的是 RabbitMQ 消息队列进行传播消息,所以需要安装 RabbitMQ。

RabbitMQ是Erlang语言开发的,所以先要安装Erlang,类似jdk一样。

2)安装过程 这里省略......

3)cmd窗口的命令

(1)安装服务 rabbitmq-service.bat install

(2)停止服务 rabbitmq-service.bat stop

(3)启动服务 rabbitmq-service.bat start

4)打开浏览器访问

(1)关于端口号

[1] 15672 RabbitMQ 的管理页面端口( 浏览器访问:http://localhost:15672 ) 。

[2] 5672 客户端连接RabbitMQ端口(java连接时使用 5672 端口) 。

5)安装管理插件成功后, 登录RabbitMQ 管理页面

(1)浏览器访问:http://localhost:15672。

(2)初始账号和密码: guest/guest

————————————————————————

————————————————————————

N.3.2 配置Config客户端

1)microservice-cloud-14-product-config-8001

(1)bootstrap.yml

spring:

cloud:

config:

name: microservice-config-product #github上的配置名称,注意没有yml后缀名

profile: prod # 本次访问的环境配置项

label: master # 远程库的分支名

uri: http://localhost:5001 #Config配置中心地址,通过它获取microservice-config-product.yml配置信息

rabbitmq:

host: localhost

port: 5672

username: guest

password: guest

# 暴露触发消息总线的地址

management:

endpoints:

web:

exposure:

include: bus-refresh

(2)添加的依赖

<!--Bus 与 rabbitMQ依赖-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-bus-amqp</artifactId>

</dependency>

<!--监听器-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

2)microservice-cloud-13-eureka-config-6001

(1)bootstrap.yml (同理还要加依赖)

spring:

cloud:

config:

name: microservice-config-eureka #github上的配置名称,注意没有yml后缀名

profile: prod #本次访问的环境配置项

label: master #远程库的分支名

uri: http://localhost:5001 #Config配置中心地址,通过它获取microservice-config-eureka.yml配置信息

# 暴露触发消息总线的地址

management:

endpoints:

web:

exposure:

include: bus-refresh

————————————————————————

————————————————————————

————————————————————————

————————————————————————

————————————————————————

————————————————————————

————————————————————————

————————————————————————

————————————————————————

N.3.3 读取配置操作

1)如果我们要读取配置文件的话,不能在用简单的Postman软件 ,发送post就认为可以读取了,必须还要在@value类中添加 @RefreshScope //刷新配置 的注解 才可以获取。

————————————————————————

————————————————————————

import com.mengxuegu.springcloud.entities.Product;

import com.mengxuegu.springcloud.service.ProductService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.cloud.context.config.annotation.RefreshScope;

import org.springframework.web.bind.annotation.*;

import java.util.List;

@RefreshScope //刷新配置

@RestController

public class ProductController {

@Value("${emp.name}")

private String name;

@GetMapping("/hello")

public String hello() {

return name;

}

@Autowired

private ProductService productService;

//value = "/product/get/{id}" 最后的是id 是浏览器变量 ,@PathVariable("id")变成 传入参数

@RequestMapping(value = "/product/get/{id}")

public Product get(@PathVariable("id") Long id) {

Product product = productService.get(id);

return product;

}

@RequestMapping(value = "/product/getAll")

public List<Product> getAll() {

return productService.getAll();

}

//http://localhost:8001/product/add 这个是访问web有的

@RequestMapping( value = "/product/add")

public Boolean add( Product product) {

return productService.add(product);

}

@RequestMapping(value = "/product/updata")

public Boolean updata(Product product) {

return productService.updata(product);

}

@RequestMapping(value = "/product/delete")

public Boolean delete( Product product) {

return productService.delete(product);

}

}

————————————————————————

———————————————————————— ————————————————————————

————————————————————————

————————————————————————

N.3.4 刷新Druid数据源配置实战

1)注意:如果我们使用的树Druid数据源,且跟该了数据,那么不可以在用简单的Postman软件 ,发送post就认为可以更新配置文件,我们还要创建配置类和@RefreshScope //刷新配置的注解结合使用呢, 才可以用Postman软件发送post命令,达到配置文件的更新效果。

2)如果使用的是默认的数据源,那么就不用创建配置类+@RefreshScope ,直接使用Postman软件发送post命令,就可以做到实时更新。

import com.alibaba.druid.pool.DruidDataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.cloud.context.config.annotation.RefreshScope;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration

public class DruidConfig {

@RefreshScope //刷新配置, 注意 注释必须放在方法上面,不要反正类上面,放在类上面没有

@ConfigurationProperties(prefix = "spring.datasource")

@Bean

public DataSource druid() {

return new DruidDataSource();

}

}

————————————————————————

————————————————————————

————————————————————————

————————————————————————

————————————————————————

————————————————————————

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
9天前
|
监控 负载均衡 Java
5 大 SpringCloud 核心组件详解,8 张图彻底弄懂
本文图文详解 Spring Cloud 的五大核心组件,帮助深入理解和掌握微服务架构。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5 大 SpringCloud 核心组件详解,8 张图彻底弄懂
|
1月前
|
存储 安全 关系型数据库
后端技术:构建高效稳定的现代Web应用
【10月更文挑战第5天】后端技术:构建高效稳定的现代Web应用
53 1
|
2月前
|
SQL 缓存 搜索推荐
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,涵盖从基础架构到性能优化的多个方面。通过分析当前主流后端技术的优缺点,并提供一些实用的解决方案和建议,帮助开发者更好地应对日常开发中的挑战。
53 1
|
12天前
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
31 5
|
1月前
|
存储 安全 数据库
后端技术在现代Web开发中的实践与创新
【10月更文挑战第13天】 本文将深入探讨后端技术在现代Web开发中的重要性,通过实际案例分析展示如何利用先进的后端技术提升用户体验和系统性能。我们将从基础架构设计、数据库优化、安全性保障等方面展开讨论,为读者提供清晰的指导和实用的技巧。无论是新手开发者还是经验丰富的技术人员,都能从中获得启发和帮助。
35 2
|
1月前
|
自然语言处理 Cloud Native 数据安全/隐私保护
后端技术在现代Web开发中的实践与创新
本文探讨了后端技术在现代Web开发中的重要性及其应用。通过分析当前流行的后端框架和开发模式,揭示了如何利用这些技术来构建高效、可扩展的Web应用程序。同时,文章也讨论了未来后端技术的发展趋势,为开发者提供了一些启示。
|
1月前
|
前端开发 JavaScript 开发者
Web组件:一种新的前端开发范式
【10月更文挑战第9天】Web组件:一种新的前端开发范式
41 2
|
20天前
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
41 0
|
1月前
|
前端开发 JavaScript Go
前端开发趋势:从响应式设计到Web组件的探索
【10月更文挑战第1天】前端开发趋势:从响应式设计到Web组件的探索
38 3
|
2月前
|
安全 JavaScript Java
后端技术在现代Web开发中的实践与挑战
本文旨在探讨后端技术在现代Web开发中的关键作用,分析其在数据处理、业务逻辑实现和系统安全等方面的重要性。通过阐述常见的后端技术和框架,如Node.js、Django和Spring Boot,展示它们在实际项目中的应用。同时,文章将讨论后端开发所面临的主要挑战,包括性能优化、扩展性和维护性问题,以及如何应对这些挑战。最终,通过对实际案例的分析,总结出一套行之有效的后端开发最佳实践,为开发者提供参考。
70 5