微服务-美团动态ThreadPoolExecutor底层实现源码实战-改进3

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 微服务-美团动态ThreadPoolExecutor底层实现源码实战-改进3

最后在监听类修改代码(NacosLinsenter)

```package com.laoyang.dtp;

import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.context.properties.source.MapConfigurationPropertySource;
import org.springframework.core.ResolvableType;
import org.springframework.core.io.ByteArrayResource;

import java.util.List;
import java.util.Properties;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

/**

  • @author:Kevin
  • @create: 2023-10-24 19:56
  • @Description: nacos自带监听器
    */

public class NacosLinsenter implements Listener, InitializingBean {

@NacosInjected
private ConfigService configService;

//nacos的dataId的名称
private static final String DATA_ID = "dtp.yaml";

private static final String GROUP = "DEFAULT_GROUP";


//创建一个线程池供下面的调用
@Override
public Executor getExecutor() {
    return Executors.newFixedThreadPool(1);
}

//每次当前的dataId只要改变,就会调用这个方法
//但是调用这个方法的线程需要上面的方法创建一个线程池
@Override
public void receiveConfigInfo(String s) {
    //首先需要将字符串yml格式转化为map的格式(单个线程池)
    YamlPropertiesFactoryBean factoryBean = new YamlPropertiesFactoryBean();
    factoryBean.setResources(new ByteArrayResource(s.getBytes()));
    //使用springboot内置工具类转换为Properties类似于map的格式
    Properties properties = factoryBean.getObject();

    //首先需要将字符串yml格式转化为List的格式(多个线程池)
    DtpProperties dtpProperties = new DtpProperties();
    MapConfigurationPropertySource sources = new MapConfigurationPropertySource(properties);
    Binder binder = new Binder(sources);
    ResolvableType type = ResolvableType.forClass(DtpProperties.class);
    Bindable<?> target = Bindable.of(type).withExistingValue(dtpProperties);
    binder.bind("dtp",target);

    //获取到更改配置的内容
    List<DtpProperties.DtpExecutorProperties> executors = dtpProperties.getDtpExecutors();

    //将改过的数据注入bean中
    for (DtpProperties.DtpExecutorProperties executor : executors) {
        //获取bean对象
        DtpExecutor dtpExecutor = DtpUtil.get(executor.getName());
        //然后修改数据
        dtpExecutor.setCorePoolSize(executor.getCorePoolSize());
        dtpExecutor.setMaximumPoolSize(executor.getMaximumPoolSize());

    }

    //获取更新后的数据

// String corePoolSize = properties.getProperty(CORE_POOL_SIZE);
// String maximumPoolSize = properties.getProperty(MAXIMUM_POOL_SIZE);
// //直接更新数据
// executor.setCorePoolSize(Integer.parseInt(corePoolSize));
// executor.setMaximumPoolSize(Integer.parseInt(maximumPoolSize));

}

@Override
public void afterPropertiesSet() throws Exception {
    //将这个NacosLinsenter与当前的dataId一一绑定
    configService.addListener(DATA_ID,GROUP,this);
}

}
```

image.png

最后在nacos修改为多个配置

image.png

相关文章
|
7天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
40 4
|
2月前
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
214 17
微服务框架Dubbo环境部署实战
|
2月前
|
运维 持续交付 API
深入理解并实践微服务架构:从理论到实战
深入理解并实践微服务架构:从理论到实战
128 3
|
2月前
|
自然语言处理 Java 网络架构
解锁跨平台微服务新纪元:Micronaut与Kotlin联袂打造的多语言兼容服务——代码、教程、实战一次打包奉送!
【9月更文挑战第6天】Micronaut是一款轻量级、高性能的Java框架,适用于微服务开发。它支持Java、Groovy和Kotlin等多种语言,提供灵活的多语言开发环境。本文通过创建一个简单的多语言兼容服务,展示如何使用Micronaut及其注解驱动特性实现REST接口,并引入国际化支持。无论是个人项目还是企业应用,Micronaut都能提供高效、一致的开发体验,成为跨平台开发的利器。通过简单的配置和代码编写,即可实现多语言支持,展现其强大的跨平台优势。
51 3
|
2月前
|
运维 监控 持续交付
深入浅出:微服务架构的设计与实战
微服务,一个在软件开发领域如雷贯耳的名词,它代表着一种现代软件架构的风格。本文将通过浅显易懂的语言,带领读者从零开始了解微服务的概念、设计原则及其在实际项目中的运用。我们将一起探讨如何将一个庞大的单体应用拆分为灵活、独立、可扩展的微服务,并分享一些实践中的经验和技巧。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
75 3
|
3月前
|
监控 Cloud Native 开发者
云端精英的.NET微服务秘籍:Azure上的创新实战演练
【8月更文挑战第28天】在现代软件开发中,微服务架构通过分解应用程序提升可维护性和扩展性。结合Azure与.NET框架,开发者能轻松打造高效且易管理的云原生微服务。首先,使用Docker容器化.NET应用,并借助Azure Kubernetes Service(AKS)或Azure Container Instances(ACI)部署。为确保高可用性和伸缩性,可利用Azure Traffic Manager负载均衡及Azure Autoscale动态调整实例数。
28 0
|
3月前
|
消息中间件 SQL 关系型数据库
go-zero微服务实战系列(十、分布式事务如何实现)
go-zero微服务实战系列(十、分布式事务如何实现)
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
3月前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。