apache / apache/rocketmq-spring

使用starter的时候需要自定义全局拦截器在 listener onMessage 之前处理 MessageExt

Open
#583 9 comments 1 reaction 0 assignees View on GitHub
Dominant language
Java
Stars
2.3k
Forks
943
PR merge metrics
No merged PRs in 30d

Description

**FEATURE REQUEST**

1. 使用starter的时候需要自定义全局拦截器在 listener onMessage 之前处理 MessageExt
2. Provide any additional detail on your proposed use case for this feature.
3. 添加message处理器
```java
package org.apache.rocketmq.spring.support;

import org.apache.rocketmq.common.message.MessageExt;

/**
* listener message customizer
*
* @author texousliu
* @since 2023-08-18
*/
public interface RocketMQListenerMessageCustomizer {

void customize(final MessageExt messageExt);

}
```
4. ListenerContainerConfiguration 注入自定义处理器
```java
private List rocketMQListenerMessageCustomizers;

public ListenerContainerConfiguration(RocketMQMessageConverter rocketMQMessageConverter,
ConfigurableEnvironment environment, RocketMQProperties rocketMQProperties,
@Autowired(required = false) List rocketMQListenerMessageCustomizers) {
this.rocketMQMessageConverter = rocketMQMessageConverter;
this.environment = environment;
this.rocketMQProperties = rocketMQProperties;
this.rocketMQListenerMessageCustomizers = rocketMQListenerMessageCustomizers;
}
```
5. DefaultRocketMQListenerContainer 添加
```java
private List rocketMQListenerMessageCustomizers;
public List getRocketMQListenerMessageCustomizers() {
return rocketMQListenerMessageCustomizers;
}

public void setRocketMQListenerMessageCustomizers(List rocketMQListenerMessageCustomizers) {
this.rocketMQListenerMessageCustomizers = rocketMQListenerMessageCustomizers;
}
```
6. ListenerContainerConfiguration 配置 DefaultRocketMQListenerContainer
```java
container.setRocketMQListenerMessageCustomizers(rocketMQListenerMessageCustomizers);
```
7. 处理消息的地方添加调用
```java
private void handleMessage(
MessageExt messageExt) throws MQClientException, RemotingException, InterruptedException {
if (rocketMQListenerMessageCustomizers != null) {
for (RocketMQListenerMessageCustomizer customizer : rocketMQListenerMessageCustomizers) {
customizer.customize(messageExt);
}
}
// ...... other code
}
```
4. Indicate the importance of this issue to you (blocker, must-have, should-have, nice-to-have). Are you currently using any workarounds to address this issue?

Contributor guide

No contributing guide indexed for this repository

Research direction

Review ListenerContainerConfiguration and DefaultRocketMQListenerContainer, starting at the handleMessage entry point. Trace how the container reaches the listener's onMessage method, then verify that configured RocketMQListenerMessageCustomizer instances process MessageExt beforehand and that the starter wiring passes them into each container.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spring
Domain
backend, distributed-systems
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.