Skip to content

Commit 1cb7e7c

Browse files
authored
Async profiler and JDK dynamic proxy
1 parent 4e7586a commit 1cb7e7c

File tree

13 files changed

+84
-26
lines changed

13 files changed

+84
-26
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ ext {
6767

6868
subprojects {
6969
group = 'com.github.sonus21'
70-
version = '2.0.1-RELEASE'
70+
version = '2.0.2-RELEASE'
7171

7272
dependencies {
7373
// https://mvnrepository.com/artifact/org.springframework/spring-messaging

rqueue-spring-boot-example/src/main/java/com/github/sonus21/rqueue/example/RQueueApplication.java

+4
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,15 @@
2323
import org.springframework.beans.factory.annotation.Value;
2424
import org.springframework.boot.SpringApplication;
2525
import org.springframework.boot.autoconfigure.SpringBootApplication;
26+
import org.springframework.cache.annotation.EnableCaching;
2627
import org.springframework.context.annotation.Bean;
2728
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
29+
import org.springframework.scheduling.annotation.EnableAsync;
2830

2931
@SpringBootApplication
3032
@EnableRedisRepositories
33+
@EnableAsync
34+
@EnableCaching
3135
public class RQueueApplication {
3236
@Value("${workers.count:3}")
3337
private int workersCount;

rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueMetricsAutoConfig.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import com.github.sonus21.rqueue.metrics.QueueCounter;
2121
import com.github.sonus21.rqueue.metrics.RqueueCounter;
2222
import com.github.sonus21.rqueue.metrics.RqueueMetrics;
23+
import com.github.sonus21.rqueue.metrics.RqueueMetricsCounter;
24+
import com.github.sonus21.rqueue.metrics.RqueueMetricsRegistry;
2325
import io.micrometer.core.instrument.MeterRegistry;
2426
import io.micrometer.core.instrument.Tags;
2527
import java.lang.reflect.Method;
@@ -41,7 +43,7 @@
4143
@Import(RqueueMetricsProperties.class)
4244
public class RqueueMetricsAutoConfig {
4345
@Bean
44-
public RqueueMetrics rqueueMetrics(
46+
public RqueueMetricsRegistry rqueueMetricsRegistry(
4547
MetricsProperties metricsProperties,
4648
@Qualifier("stringRqueueRedisTemplate") RqueueRedisTemplate<String> rqueueRedisTemplate,
4749
RqueueMetricsProperties rqueueMetricsProperties) {
@@ -68,7 +70,7 @@ private Map<String, String> getTags(MetricsProperties metricsProperties) {
6870
}
6971

7072
@Bean
71-
public RqueueCounter rqueueCounter(RqueueMetrics rqueueMetrics) {
72-
return new RqueueCounter(rqueueMetrics.getQueueCounter());
73+
public RqueueMetricsCounter rqueueMetricsCounter(RqueueMetricsRegistry rqueueMetricsRegistry) {
74+
return new RqueueCounter(rqueueMetricsRegistry.getQueueCounter());
7375
}
7476
}

rqueue-spring/src/main/java/com/github/sonus21/rqueue/spring/RqueueListenerConfig.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import com.github.sonus21.rqueue.metrics.QueueCounter;
2828
import com.github.sonus21.rqueue.metrics.RqueueCounter;
2929
import com.github.sonus21.rqueue.metrics.RqueueMetrics;
30+
import com.github.sonus21.rqueue.metrics.RqueueMetricsCounter;
31+
import com.github.sonus21.rqueue.metrics.RqueueMetricsRegistry;
3032
import org.springframework.beans.factory.annotation.Qualifier;
3133
import org.springframework.context.annotation.Bean;
3234
import org.springframework.context.annotation.ComponentScan;
@@ -76,15 +78,15 @@ public RqueueMessageSender rqueueMessageSender(RqueueMessageTemplate rqueueMessa
7678
@Bean
7779
@Conditional(MetricsEnabled.class)
7880
@DependsOn({"meterRegistry", "rqueueMetricsProperties"})
79-
public RqueueMetrics rqueueMetrics(
81+
public RqueueMetricsRegistry rqueueMetricsRegistry(
8082
@Qualifier("stringRqueueRedisTemplate") RqueueRedisTemplate<String> rqueueRedisTemplate) {
8183
QueueCounter queueCounter = new QueueCounter();
8284
return new RqueueMetrics(rqueueRedisTemplate, queueCounter);
8385
}
8486

8587
@Bean
8688
@Conditional(MetricsEnabled.class)
87-
public RqueueCounter rqueueCounter(RqueueMetrics rqueueMetrics) {
88-
return new RqueueCounter(rqueueMetrics.getQueueCounter());
89+
public RqueueMetricsCounter rqueueMetricsCounter(RqueueMetricsRegistry rqueueMetricsRegistry) {
90+
return new RqueueCounter(rqueueMetricsRegistry.getQueueCounter());
8991
}
9092
}

rqueue/src/main/java/com/github/sonus21/rqueue/core/MessageScheduler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
import org.springframework.util.Assert;
5252
import org.springframework.util.CollectionUtils;
5353

54-
abstract class MessageScheduler
54+
public abstract class MessageScheduler
5555
implements DisposableBean, ApplicationListener<RqueueBootstrapEvent> {
5656
@Autowired protected RqueueSchedulerConfig rqueueSchedulerConfig;
5757
private RedisScript<Long> redisScript;

rqueue/src/main/java/com/github/sonus21/rqueue/listener/RqueueExecutor.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.github.sonus21.rqueue.core.RqueueMessage;
2323
import com.github.sonus21.rqueue.core.support.MessageProcessor;
2424
import com.github.sonus21.rqueue.exception.UnknownSwitchCase;
25-
import com.github.sonus21.rqueue.metrics.RqueueCounter;
25+
import com.github.sonus21.rqueue.metrics.RqueueMetricsCounter;
2626
import com.github.sonus21.rqueue.models.db.MessageMetadata;
2727
import com.github.sonus21.rqueue.models.db.TaskStatus;
2828
import com.github.sonus21.rqueue.models.event.RqueueExecutionEvent;
@@ -122,14 +122,15 @@ private void callMessageProcessor(TaskStatus status, RqueueMessage rqueueMessage
122122
}
123123

124124
private void updateCounter(boolean fail) {
125-
RqueueCounter rqueueCounter = Objects.requireNonNull(container.get()).getRqueueCounter();
126-
if (rqueueCounter == null) {
125+
RqueueMetricsCounter counter =
126+
Objects.requireNonNull(container.get()).getRqueueMetricsCounter();
127+
if (counter == null) {
127128
return;
128129
}
129130
if (fail) {
130-
rqueueCounter.updateFailureCount(queueDetail.getName());
131+
counter.updateFailureCount(queueDetail.getName());
131132
} else {
132-
rqueueCounter.updateExecutionCount(queueDetail.getName());
133+
counter.updateExecutionCount(queueDetail.getName());
133134
}
134135
}
135136

rqueue/src/main/java/com/github/sonus21/rqueue/listener/RqueueMessageListenerContainer.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import com.github.sonus21.rqueue.core.QueueRegistry;
2727
import com.github.sonus21.rqueue.core.RqueueMessageTemplate;
2828
import com.github.sonus21.rqueue.core.support.MessageProcessor;
29-
import com.github.sonus21.rqueue.metrics.RqueueCounter;
29+
import com.github.sonus21.rqueue.metrics.RqueueMetricsCounter;
3030
import com.github.sonus21.rqueue.models.Concurrency;
3131
import com.github.sonus21.rqueue.models.enums.PriorityMode;
3232
import com.github.sonus21.rqueue.models.event.RqueueBootstrapEvent;
@@ -87,7 +87,7 @@ public class RqueueMessageListenerContainer
8787
@Autowired private RqueueConfig rqueueConfig;
8888

8989
@Autowired(required = false)
90-
private RqueueCounter rqueueCounter;
90+
private RqueueMetricsCounter rqueueMetricsCounter;
9191

9292
@Autowired private RqueueMessageMetadataService rqueueMessageMetadataService;
9393
private AsyncTaskExecutor taskExecutor;
@@ -594,8 +594,8 @@ public void setPriorityMode(PriorityMode priorityMode) {
594594
this.priorityMode = priorityMode;
595595
}
596596

597-
RqueueCounter getRqueueCounter() {
598-
return rqueueCounter;
597+
RqueueMetricsCounter getRqueueMetricsCounter() {
598+
return rqueueMetricsCounter;
599599
}
600600

601601
RqueueWebConfig getRqueueWebConfig() {

rqueue/src/main/java/com/github/sonus21/rqueue/metrics/RqueueCounter.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,19 @@
2121
* many messages have been processed and how many of them have been failed. In the case of failure
2222
* count increases.
2323
*/
24-
public class RqueueCounter {
24+
public class RqueueCounter implements RqueueMetricsCounter {
2525
private final QueueCounter queueCounter;
2626

2727
public RqueueCounter(QueueCounter queueCounter) {
2828
this.queueCounter = queueCounter;
2929
}
3030

31+
@Override
3132
public void updateFailureCount(String queueName) {
3233
queueCounter.updateFailureCount(queueName);
3334
}
3435

36+
@Override
3537
public void updateExecutionCount(String queueName) {
3638
queueCounter.updateExecutionCount(queueName);
3739
}

rqueue/src/main/java/com/github/sonus21/rqueue/metrics/RqueueMetrics.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import io.micrometer.core.instrument.MeterRegistry;
2727
import io.micrometer.core.instrument.Tags;
2828
import org.springframework.beans.factory.annotation.Autowired;
29-
import org.springframework.context.ApplicationListener;
3029
import org.springframework.scheduling.annotation.Async;
3130

3231
/**
@@ -35,16 +34,16 @@
3534
* queue messages can be in delayed queue because time has not reached. Some messages can be in dead
3635
* letter queue if dead letter queue is configured.
3736
*/
38-
public class RqueueMetrics implements ApplicationListener<RqueueBootstrapEvent> {
37+
public class RqueueMetrics implements RqueueMetricsRegistry {
3938
static final String QUEUE_KEY = "key";
4039
private static final String QUEUE_SIZE = "queue.size";
4140
private static final String DELAYED_QUEUE_SIZE = "delayed.queue.size";
4241
private static final String PROCESSING_QUEUE_SIZE = "processing.queue.size";
4342
private static final String DEAD_LETTER_QUEUE_SIZE = "dead.letter.queue.size";
44-
private RqueueRedisTemplate<String> rqueueMessageTemplate;
43+
private final RqueueRedisTemplate<String> rqueueMessageTemplate;
44+
private final QueueCounter queueCounter;
4545
@Autowired private MetricsProperties metricsProperties;
4646
@Autowired private MeterRegistry meterRegistry;
47-
private QueueCounter queueCounter;
4847

4948
public RqueueMetrics(
5049
RqueueRedisTemplate<String> rqueueMessageTemplate, QueueCounter queueCounter) {
@@ -107,6 +106,7 @@ public void onApplicationEvent(RqueueBootstrapEvent event) {
107106
}
108107
}
109108

109+
@Override
110110
public QueueCounter getQueueCounter() {
111111
return this.queueCounter;
112112
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright 2020 Sonu Kumar
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.github.sonus21.rqueue.metrics;
18+
19+
public interface RqueueMetricsCounter {
20+
void updateFailureCount(String queueName);
21+
22+
void updateExecutionCount(String queueName);
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright 2020 Sonu Kumar
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.github.sonus21.rqueue.metrics;
18+
19+
import com.github.sonus21.rqueue.models.event.RqueueBootstrapEvent;
20+
import org.springframework.context.ApplicationListener;
21+
22+
public interface RqueueMetricsRegistry extends ApplicationListener<RqueueBootstrapEvent> {
23+
QueueCounter getQueueCounter();
24+
}

rqueue/src/main/java/com/github/sonus21/rqueue/web/service/RqueueSystemManagerService.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717
package com.github.sonus21.rqueue.web.service;
1818

1919
import com.github.sonus21.rqueue.models.db.QueueConfig;
20+
import com.github.sonus21.rqueue.models.event.RqueueBootstrapEvent;
2021
import com.github.sonus21.rqueue.models.response.BaseResponse;
2122
import java.util.Collection;
2223
import java.util.List;
24+
import org.springframework.context.ApplicationListener;
2325

24-
public interface RqueueSystemManagerService {
26+
public interface RqueueSystemManagerService extends ApplicationListener<RqueueBootstrapEvent> {
2527
BaseResponse deleteQueue(String queueName);
2628

2729
List<String> getQueues();

rqueue/src/main/java/com/github/sonus21/rqueue/web/service/impl/RqueueSystemManagerServiceImpl.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,12 @@
3737
import java.util.Set;
3838
import java.util.stream.Collectors;
3939
import org.springframework.beans.factory.annotation.Autowired;
40-
import org.springframework.context.ApplicationListener;
4140
import org.springframework.scheduling.annotation.Async;
4241
import org.springframework.stereotype.Service;
4342
import org.springframework.util.CollectionUtils;
4443

4544
@Service
46-
public class RqueueSystemManagerServiceImpl
47-
implements RqueueSystemManagerService, ApplicationListener<RqueueBootstrapEvent> {
45+
public class RqueueSystemManagerServiceImpl implements RqueueSystemManagerService {
4846
private final RqueueConfig rqueueConfig;
4947
private final RqueueRedisTemplate<String> stringRqueueRedisTemplate;
5048
private final RqueueSystemConfigDao rqueueSystemConfigDao;

0 commit comments

Comments
 (0)