diff --git a/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/DequeController.java b/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/DequeController.java index 95bdefd..ed38c94 100644 --- a/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/DequeController.java +++ b/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/DequeController.java @@ -2,6 +2,7 @@ package com.lanyuanxiaoyao.service.queue.controller; import com.lanyuanxiaoyao.service.configuration.entity.queue.QueueItem; import com.lanyuanxiaoyao.service.queue.configuration.Constants; +import io.micrometer.core.instrument.MeterRegistry; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; @@ -11,6 +12,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.*; /** @@ -21,8 +23,13 @@ import org.springframework.web.bind.annotation.*; */ @RestController @RequestMapping("deque") -public class DequeController implements QueueOperator { +public class DequeController extends QueueOperator { private static final Logger logger = LoggerFactory.getLogger(DequeController.class); + private final MeterRegistry meterRegistry; + + public DequeController(MeterRegistry meterRegistry) { + this.meterRegistry = meterRegistry; + } private ConcurrentLinkedDeque> generateDeque(String name) { return new ConcurrentLinkedDeque<>(); @@ -36,14 +43,18 @@ public class DequeController implements QueueOperator { return function.apply(Constants.DEQUE_MAP.computeIfAbsent(name, this::generateDeque)); } - @GetMapping("/names") + @Scheduled(fixedDelay = 5_000, initialDelay = 15_000) @Override + void updateMetrics() { + updateMetrics(meterRegistry, "deque", Constants.DEQUE_MAP); + } + + @GetMapping("/names") public Enumeration names() { return Constants.DEQUE_MAP.keys(); } @GetMapping("/all") - @Override public List> all(@RequestParam("name") String name) { return makeReturn(name, ArrayList::new); } diff --git a/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/QueueController.java b/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/QueueController.java index 1c1d76d..de70ce9 100644 --- a/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/QueueController.java +++ b/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/QueueController.java @@ -2,6 +2,7 @@ package com.lanyuanxiaoyao.service.queue.controller; import com.lanyuanxiaoyao.service.configuration.entity.queue.QueueItem; import com.lanyuanxiaoyao.service.queue.configuration.Constants; +import io.micrometer.core.instrument.MeterRegistry; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; @@ -11,6 +12,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.*; /** @@ -19,8 +21,13 @@ import org.springframework.web.bind.annotation.*; */ @RestController @RequestMapping("queue") -public class QueueController implements QueueOperator { +public class QueueController extends QueueOperator { private static final Logger logger = LoggerFactory.getLogger(QueueController.class); + private final MeterRegistry meterRegistry; + + public QueueController(MeterRegistry meterRegistry) { + this.meterRegistry = meterRegistry; + } private PriorityBlockingQueue> generateDeque(String name) { return new PriorityBlockingQueue<>(); @@ -34,14 +41,18 @@ public class QueueController implements QueueOperator { return function.apply(Constants.QUEUE_MAP.computeIfAbsent(name, this::generateDeque)); } - @GetMapping("/names") + @Scheduled(fixedDelay = 5_000, initialDelay = 15_000) @Override + public void updateMetrics() { + updateMetrics(meterRegistry, "queue", Constants.QUEUE_MAP); + } + + @GetMapping("/names") public Enumeration names() { return Constants.QUEUE_MAP.keys(); } @GetMapping("/all") - @Override public List> all(@RequestParam("name") String name) { return makeReturn(name, ArrayList::new); } @@ -77,7 +88,7 @@ public class QueueController implements QueueOperator { } @GetMapping("/remove_id") - public Boolean remove(@RequestParam("name") String name, @RequestParam("id") String id) { + public Boolean removeId(@RequestParam("name") String name, @RequestParam("id") String id) { return makeReturn(name, queue -> queue.remove(new QueueItem<>(id))); } diff --git a/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/QueueOperator.java b/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/QueueOperator.java index f0468ca..cb05c28 100644 --- a/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/QueueOperator.java +++ b/service-queue/src/main/java/com/lanyuanxiaoyao/service/queue/controller/QueueOperator.java @@ -1,8 +1,10 @@ package com.lanyuanxiaoyao.service.queue.controller; -import com.lanyuanxiaoyao.service.configuration.entity.queue.QueueItem; -import java.util.Enumeration; -import java.util.List; +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Tag; +import java.util.Collection; +import java.util.Map; +import org.eclipse.collections.api.factory.Lists; /** * 队列通用操作 @@ -10,8 +12,17 @@ import java.util.List; * @author lanyuanxiaoyao * @date 2023-05-07 */ -public interface QueueOperator { - Enumeration names(); +public abstract class QueueOperator { + abstract void updateMetrics(); - List> all(String name); + protected void updateMetrics(MeterRegistry registry, String name, Map> map) { + map.forEach((queue, collection) -> registry.gaugeCollectionSize( + "service_queue_size", + Lists.immutable.of( + Tag.of("type", name), + Tag.of("name", queue) + ), + collection + )); + } }