|
|
|
@ -16,11 +16,20 @@
|
|
|
|
|
|
|
|
|
|
package com.alibaba.cloud.stream.binder.rocketmq;
|
|
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.consuming.RocketMQListenerBindingContainer;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQInboundChannelAdapter;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQMessageHandler;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQMessageSource;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.metrics.InstrumentationManager;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQExtendedBindingProperties;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQProducerProperties;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.provisioning.RocketMQTopicProvisioner;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.provisioning.selector.PartitionMessageQueueSelector;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.support.JacksonRocketMQHeaderMapper;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.support.RocketMQHeaderMapper;
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
import org.apache.rocketmq.acl.common.AclClientRPCHook;
|
|
|
|
|
import org.apache.rocketmq.acl.common.SessionCredentials;
|
|
|
|
|
import org.apache.rocketmq.client.producer.DefaultMQProducer;
|
|
|
|
@ -29,11 +38,7 @@ import org.apache.rocketmq.remoting.RPCHook;
|
|
|
|
|
import org.apache.rocketmq.spring.autoconfigure.RocketMQProperties;
|
|
|
|
|
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
|
|
|
|
import org.apache.rocketmq.spring.support.RocketMQUtil;
|
|
|
|
|
import org.springframework.cloud.stream.binder.AbstractMessageChannelBinder;
|
|
|
|
|
import org.springframework.cloud.stream.binder.BinderSpecificPropertiesProvider;
|
|
|
|
|
import org.springframework.cloud.stream.binder.ExtendedConsumerProperties;
|
|
|
|
|
import org.springframework.cloud.stream.binder.ExtendedProducerProperties;
|
|
|
|
|
import org.springframework.cloud.stream.binder.ExtendedPropertiesBinder;
|
|
|
|
|
import org.springframework.cloud.stream.binder.*;
|
|
|
|
|
import org.springframework.cloud.stream.binding.MessageConverterConfigurer;
|
|
|
|
|
import org.springframework.cloud.stream.provisioning.ConsumerDestination;
|
|
|
|
|
import org.springframework.cloud.stream.provisioning.ProducerDestination;
|
|
|
|
@ -47,18 +52,7 @@ import org.springframework.messaging.MessageHandler;
|
|
|
|
|
import org.springframework.messaging.MessagingException;
|
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.consuming.RocketMQListenerBindingContainer;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQInboundChannelAdapter;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQMessageHandler;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.integration.RocketMQMessageSource;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.metrics.InstrumentationManager;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQBinderConfigurationProperties;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQExtendedBindingProperties;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQProducerProperties;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.provisioning.RocketMQTopicProvisioner;
|
|
|
|
|
import com.alibaba.cloud.stream.binder.rocketmq.provisioning.selector.PartitionMessageQueueSelector;
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author <a href="mailto:fangjian0423@gmail.com">Jim</a>
|
|
|
|
@ -88,7 +82,7 @@ public class RocketMQMessageChannelBinder extends
|
|
|
|
|
this.instrumentationManager = instrumentationManager;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Override
|
|
|
|
|
protected MessageHandler createProducerMessageHandler(ProducerDestination destination,
|
|
|
|
|
ExtendedProducerProperties<RocketMQProducerProperties> producerProperties,
|
|
|
|
|
MessageChannel channel,
|
|
|
|
@ -161,6 +155,8 @@ public class RocketMQMessageChannelBinder extends
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RocketMQMessageHandler messageHandler = new RocketMQMessageHandler(
|
|
|
|
|
rocketMQTemplate, destination.getName(), producerGroup,
|
|
|
|
|
producerProperties.getExtension().getTransactional(),
|
|
|
|
@ -171,7 +167,7 @@ public class RocketMQMessageChannelBinder extends
|
|
|
|
|
.findFirst().orElse(null));
|
|
|
|
|
messageHandler.setBeanFactory(this.getApplicationContext().getBeanFactory());
|
|
|
|
|
messageHandler.setSync(producerProperties.getExtension().getSync());
|
|
|
|
|
|
|
|
|
|
messageHandler.setHeaderMapper(createHeaderMapper(producerProperties));
|
|
|
|
|
if (errorChannel != null) {
|
|
|
|
|
messageHandler.setSendFailureChannel(errorChannel);
|
|
|
|
|
}
|
|
|
|
@ -212,9 +208,7 @@ public class RocketMQMessageChannelBinder extends
|
|
|
|
|
consumerProperties.getExtension().getDelayLevelWhenNextConsume());
|
|
|
|
|
listenerContainer
|
|
|
|
|
.setNameServer(rocketBinderConfigurationProperties.getNameServer());
|
|
|
|
|
RocketMQHeaderMapper headerMapper=new JacksonRocketMQHeaderMapper(this.getApplicationContext()
|
|
|
|
|
.getBeansOfType(ObjectMapper.class).values().iterator().next());
|
|
|
|
|
listenerContainer.setHeaderMapper(headerMapper);
|
|
|
|
|
listenerContainer.setHeaderMapper(createHeaderMapper(consumerProperties));
|
|
|
|
|
|
|
|
|
|
RocketMQInboundChannelAdapter rocketInboundChannelAdapter = new RocketMQInboundChannelAdapter(
|
|
|
|
|
listenerContainer, consumerProperties, instrumentationManager);
|
|
|
|
@ -299,4 +293,26 @@ public class RocketMQMessageChannelBinder extends
|
|
|
|
|
this.extendedBindingProperties = extendedBindingProperties;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private RocketMQHeaderMapper createHeaderMapper(
|
|
|
|
|
final ExtendedConsumerProperties<RocketMQConsumerProperties> extendedConsumerProperties) {
|
|
|
|
|
Set<String> trustedPackages = extendedConsumerProperties.getExtension()
|
|
|
|
|
.getTrustedPackages();
|
|
|
|
|
return createHeaderMapper(trustedPackages);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private RocketMQHeaderMapper createHeaderMapper(
|
|
|
|
|
final ExtendedProducerProperties<RocketMQProducerProperties> producerProperties) {
|
|
|
|
|
return createHeaderMapper(Collections.emptyList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private RocketMQHeaderMapper createHeaderMapper(Collection<String> trustedPackages){
|
|
|
|
|
ObjectMapper objectMapper=this.getApplicationContext()
|
|
|
|
|
.getBeansOfType(ObjectMapper.class).values().iterator().next();
|
|
|
|
|
JacksonRocketMQHeaderMapper headerMapper = new JacksonRocketMQHeaderMapper(objectMapper);
|
|
|
|
|
if (!StringUtils.isEmpty(trustedPackages)) {
|
|
|
|
|
headerMapper.addTrustedPackages(trustedPackages);
|
|
|
|
|
}
|
|
|
|
|
return headerMapper;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|