This is an automated email from the ASF dual-hosted git repository.
lizhimins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git
The following commit(s) were added to refs/heads/master by this push:
new 315f98eb [Java] Record consumegroup when consumeMessage (#1290)
315f98eb is described below
commit 315f98eb894ba95bdad19ea312bd9088fe2e2f15
Author: ymwneu <[email protected]>
AuthorDate: Mon Jul 6 10:23:37 2026 +0800
[Java] Record consumegroup when consumeMessage (#1290)
---
.../client/java/impl/consumer/ConsumeService.java | 8 +++--
.../client/java/impl/consumer/ConsumeTask.java | 9 +++--
.../java/impl/consumer/FifoConsumeService.java | 4 +--
.../java/impl/consumer/LiteFifoConsumeService.java | 4 +--
.../java/impl/consumer/LitePushConsumerImpl.java | 7 ++--
.../impl/consumer/LiteStandardConsumeService.java | 4 +--
.../java/impl/consumer/PushConsumerImpl.java | 7 ++--
.../java/impl/consumer/StandardConsumeService.java | 4 +--
.../java/impl/consumer/ConsumeServiceTest.java | 16 ++++-----
.../client/java/impl/consumer/ConsumeTaskTest.java | 39 ++++++++++++++++++++--
10 files changed, 74 insertions(+), 28 deletions(-)
diff --git
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeService.java
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeService.java
index 40adb9fb..11075c1e 100644
---
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeService.java
+++
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeService.java
@@ -41,14 +41,17 @@ public abstract class ConsumeService {
private static final Logger log =
LoggerFactory.getLogger(ConsumeService.class);
protected final ClientId clientId;
+ protected final String consumerGroup;
private final MessageListener messageListener;
private final ThreadPoolExecutor consumptionExecutor;
private final MessageInterceptor messageInterceptor;
private final ScheduledExecutorService scheduler;
- public ConsumeService(ClientId clientId, MessageListener messageListener,
ThreadPoolExecutor consumptionExecutor,
+ public ConsumeService(ClientId clientId, String consumerGroup,
+ MessageListener messageListener, ThreadPoolExecutor
consumptionExecutor,
MessageInterceptor messageInterceptor, ScheduledExecutorService
scheduler) {
this.clientId = clientId;
+ this.consumerGroup = consumerGroup;
this.messageListener = messageListener;
this.consumptionExecutor = consumptionExecutor;
this.messageInterceptor = messageInterceptor;
@@ -63,7 +66,8 @@ public abstract class ConsumeService {
public ListenableFuture<ConsumeResult> consume(MessageViewImpl
messageView, Duration delay) {
final ListeningExecutorService executorService =
MoreExecutors.listeningDecorator(consumptionExecutor);
- final ConsumeTask task = new ConsumeTask(clientId, messageListener,
messageView, messageInterceptor);
+ final ConsumeTask task = new ConsumeTask(clientId, consumerGroup,
+ messageListener, messageView, messageInterceptor);
// Consume message with no delay.
if (Duration.ZERO.compareTo(delay) >= 0) {
return executorService.submit(task);
diff --git
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeTask.java
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeTask.java
index 19cea3e0..83a77ee4 100644
---
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeTask.java
+++
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeTask.java
@@ -40,17 +40,20 @@ public class ConsumeTask implements Callable<ConsumeResult>
{
static final AttributeKey<MessageViewImpl> MESSAGE_VIEW_CONTEXT_KEY =
AttributeKey.create("messageView");
static final AttributeKey<String> REMOTE_ADDR_CONTEXT_KEY =
AttributeKey.create("remoteAddr");
static final AttributeKey<Throwable> CONSUME_ERROR_CONTEXT_KEY =
AttributeKey.create("consumeError");
+ static final AttributeKey<String> CONSUMER_GROUP_CONTEXT_KEY =
AttributeKey.create("consumerGroup");
private static final Logger log =
LoggerFactory.getLogger(ConsumeTask.class);
private final ClientId clientId;
+ private final String consumerGroup;
private final MessageListener messageListener;
private final MessageViewImpl messageView;
private final MessageInterceptor messageInterceptor;
- public ConsumeTask(ClientId clientId, MessageListener messageListener,
MessageViewImpl messageView,
- MessageInterceptor messageInterceptor) {
+ public ConsumeTask(ClientId clientId, String consumerGroup,
MessageListener messageListener,
+ MessageViewImpl messageView, MessageInterceptor
messageInterceptor) {
this.clientId = clientId;
+ this.consumerGroup = consumerGroup;
this.messageListener = messageListener;
this.messageView = messageView;
this.messageInterceptor = messageInterceptor;
@@ -72,6 +75,8 @@ public class ConsumeTask implements Callable<ConsumeResult> {
context.putAttribute(REMOTE_ADDR_CONTEXT_KEY,
Attribute.create(remoteAddr));
// Add message view to context.
context.putAttribute(MESSAGE_VIEW_CONTEXT_KEY,
Attribute.create(messageView));
+ // Add consumer group to context.
+ context.putAttribute(CONSUMER_GROUP_CONTEXT_KEY,
Attribute.create(consumerGroup));
messageInterceptor.doBefore(context, generalMessages);
Throwable throwable = null;
diff --git
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/FifoConsumeService.java
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/FifoConsumeService.java
index e122dc43..81bea5a6 100644
---
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/FifoConsumeService.java
+++
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/FifoConsumeService.java
@@ -39,10 +39,10 @@ class FifoConsumeService extends ConsumeService {
private static final Logger log =
LoggerFactory.getLogger(FifoConsumeService.class);
private final boolean enableFifoConsumeAccelerator;
- public FifoConsumeService(ClientId clientId, MessageListener
messageListener,
+ public FifoConsumeService(ClientId clientId, String consumerGroup,
MessageListener messageListener,
ThreadPoolExecutor consumptionExecutor, MessageInterceptor
messageInterceptor,
ScheduledExecutorService scheduler, boolean
enableFifoConsumeAccelerator) {
- super(clientId, messageListener, consumptionExecutor,
messageInterceptor, scheduler);
+ super(clientId, consumerGroup, messageListener, consumptionExecutor,
messageInterceptor, scheduler);
this.enableFifoConsumeAccelerator = enableFifoConsumeAccelerator;
}
diff --git
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LiteFifoConsumeService.java
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LiteFifoConsumeService.java
index 74076aeb..5e79850a 100644
---
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LiteFifoConsumeService.java
+++
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LiteFifoConsumeService.java
@@ -35,10 +35,10 @@ import org.apache.rocketmq.client.java.misc.ClientId;
public class LiteFifoConsumeService extends FifoConsumeService {
- public LiteFifoConsumeService(ClientId clientId, MessageListener
messageListener,
+ public LiteFifoConsumeService(ClientId clientId, String consumerGroup,
MessageListener messageListener,
ThreadPoolExecutor consumptionExecutor, MessageInterceptor
messageInterceptor,
ScheduledExecutorService scheduler, boolean
enableFifoConsumeAccelerator) {
- super(clientId, messageListener, consumptionExecutor,
+ super(clientId, consumerGroup, messageListener, consumptionExecutor,
messageInterceptor, scheduler, enableFifoConsumeAccelerator);
}
diff --git
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LitePushConsumerImpl.java
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LitePushConsumerImpl.java
index 24fc45d9..e206faa6 100644
---
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LitePushConsumerImpl.java
+++
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LitePushConsumerImpl.java
@@ -93,11 +93,12 @@ public class LitePushConsumerImpl extends PushConsumerImpl
implements LitePushCo
if (getSettings().isFifo()) {
log.info("Create Lite FIFO consume service, consumerGroup={},
clientId={}, enableFifoConsumeAccelerator={}",
getConsumerGroup(), clientId, enableFifoConsumeAccelerator);
- return new LiteFifoConsumeService(clientId, messageListener,
consumptionExecutor, this,
- scheduler, enableFifoConsumeAccelerator);
+ return new LiteFifoConsumeService(clientId, getConsumerGroup(),
messageListener,
+ consumptionExecutor, this, scheduler,
enableFifoConsumeAccelerator);
}
log.info("Create Lite standard consume service, consumerGroup={},
clientId={}", getConsumerGroup(), clientId);
- return new LiteStandardConsumeService(clientId, messageListener,
consumptionExecutor, this, scheduler);
+ return new LiteStandardConsumeService(clientId, getConsumerGroup(),
+ messageListener, consumptionExecutor, this, scheduler);
}
}
\ No newline at end of file
diff --git
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LiteStandardConsumeService.java
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LiteStandardConsumeService.java
index efbe1ab6..6044aac3 100644
---
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LiteStandardConsumeService.java
+++
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/LiteStandardConsumeService.java
@@ -35,10 +35,10 @@ import org.slf4j.LoggerFactory;
public class LiteStandardConsumeService extends ConsumeService {
private static final Logger log =
LoggerFactory.getLogger(LiteStandardConsumeService.class);
- public LiteStandardConsumeService(ClientId clientId, MessageListener
messageListener,
+ public LiteStandardConsumeService(ClientId clientId, String consumerGroup,
MessageListener messageListener,
ThreadPoolExecutor consumptionExecutor, MessageInterceptor
messageInterceptor,
ScheduledExecutorService scheduler) {
- super(clientId, messageListener, consumptionExecutor,
messageInterceptor, scheduler);
+ super(clientId, consumerGroup, messageListener, consumptionExecutor,
messageInterceptor, scheduler);
}
@Override
diff --git
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/PushConsumerImpl.java
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/PushConsumerImpl.java
index 002a14f4..52f7fe67 100644
---
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/PushConsumerImpl.java
+++
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/PushConsumerImpl.java
@@ -250,11 +250,12 @@ class PushConsumerImpl extends ConsumerImpl implements
PushConsumer {
if (getSettings().isFifo()) {
log.info("Create FIFO consume service, consumerGroup={},
clientId={}, enableFifoConsumeAccelerator={}",
getConsumerGroup(), clientId, enableFifoConsumeAccelerator);
- return new FifoConsumeService(clientId, messageListener,
consumptionExecutor, this,
- scheduler, enableFifoConsumeAccelerator);
+ return new FifoConsumeService(clientId, getConsumerGroup(),
messageListener,
+ consumptionExecutor, this, scheduler,
enableFifoConsumeAccelerator);
}
log.info("Create standard consume service, consumerGroup={},
clientId={}", getConsumerGroup(), clientId);
- return new StandardConsumeService(clientId, messageListener,
consumptionExecutor, this, scheduler);
+ return new StandardConsumeService(clientId, getConsumerGroup(),
+ messageListener, consumptionExecutor, this, scheduler);
}
/**
diff --git
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/StandardConsumeService.java
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/StandardConsumeService.java
index 2775077a..828fb8e0 100644
---
a/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/StandardConsumeService.java
+++
b/java/client/src/main/java/org/apache/rocketmq/client/java/impl/consumer/StandardConsumeService.java
@@ -36,10 +36,10 @@ import org.slf4j.LoggerFactory;
public class StandardConsumeService extends ConsumeService {
private static final Logger log =
LoggerFactory.getLogger(StandardConsumeService.class);
- public StandardConsumeService(ClientId clientId, MessageListener
messageListener,
+ public StandardConsumeService(ClientId clientId, String consumerGroup,
MessageListener messageListener,
ThreadPoolExecutor consumptionExecutor, MessageInterceptor
messageInterceptor,
ScheduledExecutorService scheduler) {
- super(clientId, messageListener, consumptionExecutor,
messageInterceptor, scheduler);
+ super(clientId, consumerGroup, messageListener, consumptionExecutor,
messageInterceptor, scheduler);
}
@Override
diff --git
a/java/client/src/test/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeServiceTest.java
b/java/client/src/test/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeServiceTest.java
index dbf8c89b..687ff759 100644
---
a/java/client/src/test/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeServiceTest.java
+++
b/java/client/src/test/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeServiceTest.java
@@ -51,8 +51,8 @@ public class ConsumeServiceTest extends TestBase {
@Test
public void testConsumeSuccess() throws ExecutionException,
InterruptedException, TimeoutException {
final MessageListener messageListener = messageView ->
ConsumeResult.SUCCESS;
- final ConsumeService consumeService = new ConsumeService(clientId,
messageListener,
- consumptionExecutor, interceptor, scheduler) {
+ final ConsumeService consumeService = new ConsumeService(clientId,
"testConsumerGroup",
+ messageListener, consumptionExecutor, interceptor, scheduler) {
@Override
public void consume(ProcessQueue pq, List<MessageViewImpl>
messageViews) {
}
@@ -66,8 +66,8 @@ public class ConsumeServiceTest extends TestBase {
@Test
public void testConsumeFailure() throws ExecutionException,
InterruptedException, TimeoutException {
final MessageListener messageListener = messageView ->
ConsumeResult.FAILURE;
- final ConsumeService consumeService = new ConsumeService(clientId,
messageListener,
- consumptionExecutor, interceptor, scheduler) {
+ final ConsumeService consumeService = new ConsumeService(clientId,
"testConsumerGroup",
+ messageListener, consumptionExecutor, interceptor, scheduler) {
@Override
public void consume(ProcessQueue pq, List<MessageViewImpl>
messageViews) {
}
@@ -83,8 +83,8 @@ public class ConsumeServiceTest extends TestBase {
final MessageListener messageListener = messageView -> {
throw new RuntimeException();
};
- final ConsumeService consumeService = new ConsumeService(clientId,
messageListener,
- consumptionExecutor, interceptor, scheduler) {
+ final ConsumeService consumeService = new ConsumeService(clientId,
"testConsumerGroup",
+ messageListener, consumptionExecutor, interceptor, scheduler) {
@Override
public void consume(ProcessQueue pq, List<MessageViewImpl>
messageViews) {
@@ -99,8 +99,8 @@ public class ConsumeServiceTest extends TestBase {
@Test
public void testConsumeWithDelay() throws ExecutionException,
InterruptedException {
final MessageListener messageListener = messageView ->
ConsumeResult.SUCCESS;
- final ConsumeService consumeService = new ConsumeService(clientId,
messageListener,
- consumptionExecutor, interceptor, scheduler) {
+ final ConsumeService consumeService = new ConsumeService(clientId,
"testConsumerGroup",
+ messageListener, consumptionExecutor, interceptor, scheduler) {
@Override
public void consume(ProcessQueue pq, List<MessageViewImpl>
messageViews) {
diff --git
a/java/client/src/test/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeTaskTest.java
b/java/client/src/test/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeTaskTest.java
index 23312142..9be98a00 100644
---
a/java/client/src/test/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeTaskTest.java
+++
b/java/client/src/test/java/org/apache/rocketmq/client/java/impl/consumer/ConsumeTaskTest.java
@@ -19,9 +19,14 @@ package org.apache.rocketmq.client.java.impl.consumer;
import static org.junit.Assert.assertEquals;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
import org.apache.rocketmq.client.apis.consumer.MessageListener;
+import org.apache.rocketmq.client.java.hook.Attribute;
import org.apache.rocketmq.client.java.hook.MessageInterceptor;
+import org.apache.rocketmq.client.java.hook.MessageInterceptorContext;
+import org.apache.rocketmq.client.java.message.GeneralMessage;
import org.apache.rocketmq.client.java.message.MessageViewImpl;
import org.apache.rocketmq.client.java.misc.ClientId;
import org.apache.rocketmq.client.java.tool.TestBase;
@@ -37,7 +42,8 @@ public class ConsumeTaskTest extends TestBase {
final MessageListener messageListener =
Mockito.mock(MessageListener.class);
Mockito.when(messageListener.consume(messageView)).thenReturn(ConsumeResult.SUCCESS);
final MessageInterceptor messageInterceptor =
Mockito.mock(MessageInterceptor.class);
- final ConsumeTask consumeTask = new ConsumeTask(clientId,
messageListener, messageView, messageInterceptor);
+ final ConsumeTask consumeTask = new ConsumeTask(clientId,
"testConsumerGroup",
+ messageListener, messageView, messageInterceptor);
final ConsumeResult consumeResult = consumeTask.call();
assertEquals(ConsumeResult.SUCCESS, consumeResult);
}
@@ -49,8 +55,37 @@ public class ConsumeTaskTest extends TestBase {
final MessageListener messageListener =
Mockito.mock(MessageListener.class);
Mockito.when(messageListener.consume(messageView)).thenThrow(new
RuntimeException());
final MessageInterceptor messageInterceptor =
Mockito.mock(MessageInterceptor.class);
- final ConsumeTask consumeTask = new ConsumeTask(clientId,
messageListener, messageView, messageInterceptor);
+ final ConsumeTask consumeTask = new ConsumeTask(clientId,
"testConsumerGroup",
+ messageListener, messageView, messageInterceptor);
final ConsumeResult consumeResult = consumeTask.call();
assertEquals(ConsumeResult.FAILURE, consumeResult);
}
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testConsumerGroupInContext() {
+ final String expectedGroup = "myConsumerGroup";
+ ClientId clientId = new ClientId();
+ final MessageViewImpl messageView = fakeMessageViewImpl();
+ final MessageListener messageListener =
Mockito.mock(MessageListener.class);
+
Mockito.when(messageListener.consume(messageView)).thenReturn(ConsumeResult.SUCCESS);
+ final AtomicReference<String> capturedGroup = new AtomicReference<>();
+ final MessageInterceptor messageInterceptor = new MessageInterceptor()
{
+ @Override
+ public void doBefore(MessageInterceptorContext context,
List<GeneralMessage> messages) {
+ Attribute<String> attr =
context.getAttribute(ConsumeTask.CONSUMER_GROUP_CONTEXT_KEY);
+ if (attr != null) {
+ capturedGroup.set(attr.get());
+ }
+ }
+
+ @Override
+ public void doAfter(MessageInterceptorContext context,
List<GeneralMessage> messages) {
+ }
+ };
+ final ConsumeTask consumeTask = new ConsumeTask(clientId,
expectedGroup, messageListener,
+ messageView, messageInterceptor);
+ consumeTask.call();
+ assertEquals(expectedGroup, capturedGroup.get());
+ }
}
\ No newline at end of file