feat(queue): 增加队列指标

This commit is contained in:
2024-02-04 15:07:07 +08:00
parent 02f22070fd
commit b5ac36fd8b
3 changed files with 46 additions and 13 deletions

View File

@@ -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<QueueItem<?>> 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<String> names() {
return Constants.DEQUE_MAP.keys();
}
@GetMapping("/all")
@Override
public List<QueueItem<?>> all(@RequestParam("name") String name) {
return makeReturn(name, ArrayList::new);
}

View File

@@ -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<QueueItem<?>> 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<String> names() {
return Constants.QUEUE_MAP.keys();
}
@GetMapping("/all")
@Override
public List<QueueItem<?>> 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)));
}

View File

@@ -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<String> names();
public abstract class QueueOperator {
abstract void updateMetrics();
List<QueueItem<?>> all(String name);
protected void updateMetrics(MeterRegistry registry, String name, Map<String, ? extends Collection<?>> map) {
map.forEach((queue, collection) -> registry.gaugeCollectionSize(
"service_queue_size",
Lists.immutable.of(
Tag.of("type", name),
Tag.of("name", queue)
),
collection
));
}
}