当前位置: 首页 > wzjs >正文

运城网站建设报价龙岩网站建设较好的公司

运城网站建设报价,龙岩网站建设较好的公司,破解要钱网站,中英双语 网站 模板文章目录 引言一、Spring Cloud Bus基本架构二、配置动态刷新实现2.1 基础配置2.2 刷新流程2.3 定向刷新 三、自定义事件广播3.1 定义自定义事件3.2 注册和监听事件3.3 发布事件 四、高级配置与优化4.1 消息持久化4.2 事件追踪4.3 安全控制 总结 引言 在微服务架构中&#xff…

在这里插入图片描述

文章目录

    • 引言
    • 一、Spring Cloud Bus基本架构
    • 二、配置动态刷新实现
      • 2.1 基础配置
      • 2.2 刷新流程
      • 2.3 定向刷新
    • 三、自定义事件广播
      • 3.1 定义自定义事件
      • 3.2 注册和监听事件
      • 3.3 发布事件
    • 四、高级配置与优化
      • 4.1 消息持久化
      • 4.2 事件追踪
      • 4.3 安全控制
    • 总结

引言

在微服务架构中,配置变更的实时传播是一个关键挑战,尤其当服务实例数量庞大时。Spring Cloud Bus通过轻量级消息代理(如RabbitMQ、Kafka)连接分布式系统中的各个节点,形成一个消息总线,实现配置变更的动态广播和更新。本文将深入探讨Spring Cloud Bus的工作原理、实现机制和应用场景,聚焦于如何利用Bus实现配置的动态刷新和系统级事件的广播。

一、Spring Cloud Bus基本架构

Spring Cloud Bus基于轻量级消息代理构建,通过消息通道将分布式系统的各个节点连接起来,形成消息传递网络。每个应用实例作为总线上的一个节点,既可以向总线发布消息,也可以从总线接收消息,实现节点间的互联互通。

/*** 启用Spring Cloud Bus* 需引入相关依赖:spring-cloud-starter-bus-amqp或spring-cloud-starter-bus-kafka*/
@SpringBootApplication
@EnableDiscoveryClient
public class MicroserviceApplication {public static void main(String[] args) {SpringApplication.run(MicroserviceApplication.class, args);}
}

Bus的核心配置主要涉及消息代理的连接设置:

spring:application:name: order-servicerabbitmq:  # 使用RabbitMQ作为消息代理host: localhostport: 5672username: guestpassword: guest# 或者使用Kafka# kafka:#   bootstrap-servers: localhost:9092#   consumer:#     group-id: ${spring.application.name}cloud:bus:enabled: true  # 启用消息总线trace:enabled: true  # 启用总线跟踪,记录消息传播过程

Spring Cloud Bus的底层通过Spring Cloud Stream实现消息的发送和接收,而Spring Cloud Stream又是基于消息中间件的抽象层,支持不同的消息中间件实现,实现了消息驱动的微服务架构。

二、配置动态刷新实现

Spring Cloud Bus最常见的应用场景是结合Spring Cloud Config实现配置的动态刷新。当配置发生变更时,只需向一个服务实例发送刷新请求,该实例会通过消息总线将刷新事件广播给所有相关服务,从而实现配置的集中更新。

2.1 基础配置

首先,确保相关服务引入了必要依赖:

<!-- 配置中心客户端 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId>
</dependency><!-- 消息总线(基于RabbitMQ) -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency><!-- Actuator,提供刷新端点 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

然后,配置Actuator端点:

management:endpoints:web:exposure:include: 'bus-refresh,bus-env,refresh,info,health'  # 暴露Bus相关端点endpoint:bus-refresh:enabled: true

2.2 刷新流程

当配置中心的配置发生变更时,刷新流程如下:

  1. 向任一服务实例发送POST请求,触发/actuator/bus-refresh端点。
  2. 该实例接收到请求后,发布RefreshRemoteApplicationEvent事件到消息总线。
  3. 订阅该事件的所有服务实例收到事件,执行本地配置刷新。
  4. 每个实例的@RefreshScope注解的Bean会重新初始化,加载最新配置。
/*** 需要动态刷新配置的Bean*/
@Service
@RefreshScope  // 标记此Bean需要在配置刷新时重新创建
public class OrderConfigService {@Value("${order.payment-timeout}")private int paymentTimeout;@Value("${order.max-retry-count}")private int maxRetryCount;public Map<String, Object> getOrderConfig() {Map<String, Object> config = new HashMap<>();config.put("paymentTimeout", paymentTimeout);config.put("maxRetryCount", maxRetryCount);return config;}
}

2.3 定向刷新

在大型系统中,可能只需刷新部分服务的配置。Spring Cloud Bus支持定向刷新,即只向特定的服务或实例广播刷新事件:

# 刷新特定服务的所有实例
curl -X POST http://localhost:8080/actuator/bus-refresh/order-service:**# 刷新特定实例
curl -X POST http://localhost:8080/actuator/bus-refresh/order-service:8081

定向刷新的实现原理是在刷新事件中包含目标服务或实例的标识,只有匹配的节点才会处理该事件:

/*** 自定义条件刷新处理器* 根据特定条件决定是否处理刷新事件*/
@Component
public class ConditionalRefreshListener {@EventListenerpublic void onRefreshEvent(RefreshRemoteApplicationEvent event) {// 根据事件源和目标判断是否需要处理String originService = event.getOriginService();String destinationService = event.getDestinationService();// 判断逻辑...}
}

三、自定义事件广播

除了配置刷新,Spring Cloud Bus还支持自定义事件的广播,使服务间能够通过消息总线传递业务事件,实现解耦的事件驱动架构。

3.1 定义自定义事件

首先,定义一个自定义远程事件:

/*** 自定义远程事件* 继承RemoteApplicationEvent,可通过总线广播*/
public class OrderCreatedEvent extends RemoteApplicationEvent {private String orderId;private Double amount;// 无参构造函数,用于反序列化public OrderCreatedEvent() {}public OrderCreatedEvent(Object source, String originService, String destinationService, String orderId, Double amount) {// source: 事件源// originService: 发出事件的服务// destinationService: 目标服务,":"为通配符super(source, originService, destinationService);this.orderId = orderId;this.amount = amount;}// getter和setterpublic String getOrderId() {return orderId;}public Double getAmount() {return amount;}
}

3.2 注册和监听事件

注册自定义事件类型,使其能够在总线上传输:

/*** 事件配置*/
@Configuration
public class EventConfig {@Beanpublic RemoteApplicationEventScan remoteApplicationEventScan() {return new RemoteApplicationEventScan("com.example.events");  // 事件类所在包}
}

在目标服务中监听事件:

/*** 事件监听器*/
@Component
public class OrderEventListener {private static final Logger log = LoggerFactory.getLogger(OrderEventListener.class);@EventListenerpublic void handleOrderCreatedEvent(OrderCreatedEvent event) {log.info("Received order created event, orderId: {}, amount: {}", event.getOrderId(), event.getAmount());// 处理订单创建事件,如触发后续业务流程processOrder(event.getOrderId(), event.getAmount());}private void processOrder(String orderId, Double amount) {// 具体的业务处理逻辑}
}

3.3 发布事件

在需要的地方发布事件到总线:

/*** 订单服务*/
@Service
public class OrderService {@Autowiredprivate ApplicationContext context;@Autowiredprivate ServiceRegistry serviceRegistry;public String createOrder(String productId, int quantity, Double price) {// 创建订单的业务逻辑String orderId = generateOrderId();Double amount = price * quantity;// 保存订单saveOrder(orderId, productId, quantity, amount);// 发布订单创建事件到总线publishOrderCreatedEvent(orderId, amount);return orderId;}private void publishOrderCreatedEvent(String orderId, Double amount) {// 构建事件// source: 当前应用上下文// originService: 当前服务ID// destinationService: 目标服务模式,":**"表示所有服务的所有实例OrderCreatedEvent event = new OrderCreatedEvent(this.context,serviceRegistry.getAppId(),":**",orderId,amount);// 发布事件到上下文,会被BusAutoConfiguration处理并广播context.publishEvent(event);}// 其他辅助方法
}

四、高级配置与优化

随着系统规模的扩大,可能需要对Spring Cloud Bus进行一些高级配置和优化,以提升性能和可靠性。

4.1 消息持久化

为避免消息丢失,可以配置消息持久化:

spring:cloud:stream:bindings:springCloudBusInput:destination: springCloudBusgroup: ${spring.application.name}  # 消费者组,确保消息只被同名服务消费一次consumer:durableSubscription: true  # 持久订阅springCloudBusOutput:destination: springCloudBusproducer:required-groups: ${spring.application.name}  # 确保消息存储直到被消费

4.2 事件追踪

启用事件追踪可以监控事件的传播过程:

spring:cloud:bus:trace:enabled: true  # 启用事件追踪

通过/actuator/httptrace端点可以查看事件传播的日志,包括源服务、目标服务、事件类型等信息。

4.3 安全控制

在生产环境中,应对Bus相关的端点进行安全控制,防止未授权访问:

spring:security:user:name: adminpassword: '{cipher}AQA...'  # 加密密码management:endpoints:web:exposure:include: 'bus-refresh'  # 仅暴露必要端点endpoint:bus-refresh:enabled: true

总结

Spring Cloud Bus作为Spring Cloud家族中的核心组件,通过消息总线机制连接分布式系统中的各个节点,实现了配置的动态刷新和事件的高效广播。它与Spring Cloud Config的结合使用,显著提升了微服务系统配置管理的灵活性和效率。通过自定义事件广播机制,Spring Cloud Bus还能够支持业务事件的传递,为实现事件驱动架构提供基础设施。

在实际应用中,根据系统规模和性能要求,可以选择合适的消息中间件(RabbitMQ或Kafka),并进行适当的配置优化。对于敏感环境,还应注意端点的安全控制和访问权限管理。随着微服务架构的不断发展,Spring Cloud Bus凭借其简单易用的特性,为解决分布式系统中的通信和协调问题提供了有效的解决方案。


文章转载自:

http://qtIkGgQk.fygLg.cn
http://Fgl6gYyt.fygLg.cn
http://xQNuPpRD.fygLg.cn
http://E4cmTKTS.fygLg.cn
http://RXmMhVuZ.fygLg.cn
http://UbPnJ1lm.fygLg.cn
http://c5OC11Ot.fygLg.cn
http://GsW2qYYZ.fygLg.cn
http://yZi8FQ0d.fygLg.cn
http://iPuiN1lE.fygLg.cn
http://3s6DtYgz.fygLg.cn
http://0mDPJlb6.fygLg.cn
http://SOMv4G3J.fygLg.cn
http://2VB8i8FS.fygLg.cn
http://AE2qGKBt.fygLg.cn
http://VOYo74CT.fygLg.cn
http://FwTHicHs.fygLg.cn
http://O14s0L5G.fygLg.cn
http://rCJIyny2.fygLg.cn
http://gVpAuem4.fygLg.cn
http://aL6ZrOUl.fygLg.cn
http://rQpUb1UN.fygLg.cn
http://oHPdbbkS.fygLg.cn
http://vaRnOrvi.fygLg.cn
http://DZgsA8NQ.fygLg.cn
http://LqzHhU77.fygLg.cn
http://9upd6Vjw.fygLg.cn
http://XBPQ35pt.fygLg.cn
http://BCXJ61B0.fygLg.cn
http://BVUb3FYD.fygLg.cn
http://www.dtcms.com/wzjs/645975.html

相关文章:

  • 互联网营销 网站 推荐制作网站需要哪些知识
  • 做网站要用到什么做pc端网站一般多少钱
  • 设计型网站自带优化东营有什么网站建设公司
  • 国外的贸易网站做网站有哪个软件好
  • 网站做实名认证移动互联网开发实训报告
  • 怎么做网站收录的关键词免费网站seo优化
  • asp access 手机站 用于做微网站2016网站优化
  • 怎么在自己的网站上传视频字体设计在线
  • 徐州企业做网站做磁力解析网站
  • 大气企业响应式网站用自己的电脑做服务器搭建网站
  • 乐清 做网站 多少钱长沙互联网装修公司
  • 北京建设工程教育中心网站现在跨境电商最好做的是什么平台
  • 专业商城网站建设报价有限公司破产后债务还用还吗
  • 泗阳做网站的WordPress的index
  • 中国城乡和住房建设部网站首页佛山公司网页制作
  • 网站开发工作怎样网站建设演讲稿
  • seo网站优化培训多少价格如何做网站认证
  • 爱站网seo工具坑梓网站建设市场
  • 学网站建设可以从事什么工作以前做的网站怎么才能登陆后台
  • 大学网站 作风建设专题手机端wordpress模板下载
  • 邯郸市住房和建设官方网站建设网站需要电脑配置
  • 临高网站建设抖音怎么运营和引流
  • 嘉定公司网站设计电脑平面设计培训班多少钱
  • 上海著名网站建设vue做网站好吗
  • 南京网站建设包括哪些电影宣传网站开发设计
  • 祥云平台网站管理系统开发公司招商引资产生账务怎么做账
  • 做外贸在哪个网站车陂手机网站建设
  • 网站开发做前端还是后端电子商务他们的代表网站
  • 湖北建设信息网站 联系方式浏览器官网入口
  • 线上购物网站开发浙江海滨建设集团有限公司网站