commit 25acd82fbb2df6e5b9ce41326c6088094130f0b0 Author: Administrator Date: Tue May 9 19:37:39 2023 +0800 原生线程池监控,Web容器监控,三方框架监控 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8450319 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +# Created by .ignore support plugin (hsz.mobi) +### Example user template template +### Example user template + +# IntelliJ project files +.idea +*.iml +out +gen +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..201be8b --- /dev/null +++ b/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.3.12.RELEASE + + + com.mashibing + hippo4j-client + 1.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter-web + + + cn.hippo4j + hippo4j-spring-boot-starter + 1.5.0 + + + org.springframework.boot + spring-boot-starter-amqp + + + cn.hippo4j + hippo4j-spring-boot-starter-adapter-rabbitmq + 1.5.0 + + + + + + \ No newline at end of file diff --git a/src/main/java/com/mashibing/Hippo4jClientStarterApp.java b/src/main/java/com/mashibing/Hippo4jClientStarterApp.java new file mode 100644 index 0000000..5606697 --- /dev/null +++ b/src/main/java/com/mashibing/Hippo4jClientStarterApp.java @@ -0,0 +1,19 @@ +package com.mashibing; + +import cn.hippo4j.core.enable.EnableDynamicThreadPool; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author zjw + * @description + */ +@SpringBootApplication +@EnableDynamicThreadPool +public class Hippo4jClientStarterApp { + + public static void main(String[] args) { + SpringApplication.run(Hippo4jClientStarterApp.class,args); + } + +} diff --git a/src/main/java/com/mashibing/config/RabbitMQThreadPoolConfig.java b/src/main/java/com/mashibing/config/RabbitMQThreadPoolConfig.java new file mode 100644 index 0000000..d714cf0 --- /dev/null +++ b/src/main/java/com/mashibing/config/RabbitMQThreadPoolConfig.java @@ -0,0 +1,44 @@ +package com.mashibing.config; + +import org.springframework.amqp.rabbit.config.AbstractRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.config.DirectRabbitListenerContainerFactory; +import org.springframework.amqp.rabbit.connection.AbstractConnectionFactory; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +/** + * @author zjw + * @description + */ +@Configuration +public class RabbitMQThreadPoolConfig { + + /** + * 构建消费者要用到的线程 + * @return + */ + @Bean + public ThreadPoolTaskExecutor rabbitThreadPool(){ + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(5); + executor.setMaxPoolSize(5); + executor.setQueueCapacity(100); + executor.setThreadNamePrefix("rabbit-"); + return executor; + } + + /** + * 构建容器工厂,将线程池设置进入 + * @param connectionFactory + * @return + */ + @Bean + public AbstractRabbitListenerContainerFactory defaultContainerFactory(ThreadPoolTaskExecutor rabbitThreadPool,AbstractConnectionFactory connectionFactory){ + DirectRabbitListenerContainerFactory factory = new DirectRabbitListenerContainerFactory(); + factory.setConnectionFactory(connectionFactory); + connectionFactory.setExecutor(rabbitThreadPool); + return factory; + } +} diff --git a/src/main/java/com/mashibing/config/ThreadPoolConfig.java b/src/main/java/com/mashibing/config/ThreadPoolConfig.java new file mode 100644 index 0000000..4ef1e1b --- /dev/null +++ b/src/main/java/com/mashibing/config/ThreadPoolConfig.java @@ -0,0 +1,37 @@ +package com.mashibing.config; + +import cn.hippo4j.common.executor.support.BlockingQueueTypeEnum; +import cn.hippo4j.core.executor.DynamicThreadPool; +import cn.hippo4j.core.executor.support.ThreadPoolBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * 交给Hippo4j-Server管理的线程池 + * @author zjw + * @description + */ +@Configuration +public class ThreadPoolConfig { + + @Bean + @DynamicThreadPool + public ThreadPoolExecutor testThreadPool(){ + //1、 采用线程池Builder去构建 + ThreadPoolExecutor testThreadPool = ThreadPoolBuilder.builder() + .corePoolSize(10) + .maximumPoolSize(10) + .keepAliveTime(10) + .timeUnit(TimeUnit.SECONDS) + .workQueue(BlockingQueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE) + .threadFactory("test") + .rejected(new ThreadPoolExecutor.AbortPolicy()) + .threadPoolId("test") + .dynamicPool() + .build(); + return testThreadPool; + } +} diff --git a/src/main/java/com/mashibing/controller/TestController.java b/src/main/java/com/mashibing/controller/TestController.java new file mode 100644 index 0000000..8dddd16 --- /dev/null +++ b/src/main/java/com/mashibing/controller/TestController.java @@ -0,0 +1,31 @@ +package com.mashibing.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @author zjw + * @description + */ +@RestController +public class TestController { + + @Resource + private ThreadPoolExecutor testThreadPool; + + @GetMapping("/test") + public String test(){ + testThreadPool.execute(() -> System.out.println(Thread.currentThread().getName())); + return "ok"; + } + + @GetMapping("/web") + public String web(){ + System.out.println(Thread.currentThread().getName()); + return "ok"; + } + +} diff --git a/src/main/java/com/mashibing/mq/TestListener.java b/src/main/java/com/mashibing/mq/TestListener.java new file mode 100644 index 0000000..af86d51 --- /dev/null +++ b/src/main/java/com/mashibing/mq/TestListener.java @@ -0,0 +1,18 @@ +package com.mashibing.mq; + +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +/** + * @author zjw + * @description + */ +@Component +public class TestListener { + + @RabbitListener(queues = "hippo4j",containerFactory = "defaultContainerFactory") + public void consume(String message){ + System.out.println(Thread.currentThread().getName() + ":消费消息 --> " + message); + } + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..fd134f8 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,18 @@ +spring: + profiles: + active: + application: + name: hippo4j-client + dynamic: + thread-pool: + server-addr: 192.168.11.88:6691 + username: admin + password: 123456 + namespace: mashibing # 租户名称 + item-id: ${spring.application.name} # 项目名称,需要与与服务名称保持一致。 + rabbitmq: + host: 192.168.11.88 + port: 5672 + username: guest + password: guest + virtual-host: / \ No newline at end of file