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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
18天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
1月前
|
缓存 关系型数据库 API
后端开发:构建高效、可扩展的Web应用程序的关键
后端开发:构建高效、可扩展的Web应用程序的关键
22 0
|
2天前
|
前端开发 JavaScript Java
前端与后端:构建现代Web应用的双翼
前端与后端:构建现代Web应用的双翼
|
11天前
|
缓存 负载均衡 数据库
优化后端性能:提升Web应用响应速度的关键策略
在当今数字化时代,Web应用的性能对于用户体验至关重要。本文探讨了如何通过优化后端架构和技术手段,提升Web应用的响应速度。从数据库优化、缓存机制到异步处理等多个方面进行了深入分析,并提出了一系列实用的优化策略,以帮助开发者更好地应对日益增长的用户访问量和复杂的业务需求。
16 1
|
1月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
785 0
|
1月前
web后端-IIS-web发布
web后端-IIS-web发布
|
1月前
|
应用服务中间件 Apache nginx
web后端-web服务器对比
web后端-web服务器对比
|
1月前
|
应用服务中间件
web后端-EasyWeb-web发布
web后端-EasyWeb-web发布
|
1月前
|
监控
web后端-最好用的扒站仿站工具(网页克隆网页复制)
web后端-最好用的扒站仿站工具(网页克隆网页复制)
|
1月前
|
机器学习/深度学习 XML JSON
web后端-java-httpClient
web后端-java-httpClient