apache / apache/rocketmq-spring
使用starter的时候需要自定义全局拦截器在 listener onMessage 之前处理 MessageExt
- 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