1. 配置阿里云accessKey
@Configuration
@ConfigurationProperties(prefix = "aliyun.auth")
public class AliyunAuthConfig {
private String accessKey;
private String secretKey;
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
}
2. 注册ProducerBean
@Configuration
public class RocketMqProducerConfiguration {
@Autowired
private AliyunAuthConfig mqConfig;
@Value("${rocketmq.server.address}")
private String nameSrvAddr;
@Bean(initMethod = "start", destroyMethod = "shutdown")
public ProducerBean buildProducer() {
ProducerBean producer = new ProducerBean();
producer.setProperties(getMqProperties());
return producer;
}
public Properties getMqProperties() {
Properties properties = new Properties();
properties.setProperty(PropertyKeyConst.AccessKey, mqConfig.getAccessKey());
properties.setProperty(PropertyKeyConst.SecretKey, mqConfig.getSecretKey());
properties.setProperty(PropertyKeyConst.NAMESRV_ADDR, this.nameSrvAddr);
return properties;
}
}
3. 注册Consumer
@Configuration
public class RocketMqConsumerConfiguration {
@Value("${rocketmq.server.address}")
private String nameSrvAddr;
private final String GID = "GID_FIRST_CHOICE_COOP_ORDER";
@Autowired
private AliyunAuthConfig aliyunAuthConfig;
@Autowired(required = false)
private List<MqSubscriptionConfig> mqSubscriptionConfigList;
@Bean(initMethod = "start", destroyMethod = "shutdown", name = "consumerBean")
public ConsumerBean buildConsumer() {
ConsumerBean consumerBean = new ConsumerBean();
//配置文件
Properties properties = getProperties();
properties.setProperty(PropertyKeyConst.AccessKey, aliyunAuthConfig.getAccessKey());
properties.setProperty(PropertyKeyConst.SecretKey, aliyunAuthConfig.getSecretKey());
properties.setProperty(PropertyKeyConst.GROUP_ID, GID);
//将消费者线程数固定为20个 20为默认值
properties.setProperty(PropertyKeyConst.ConsumeThreadNums, "20");
consumerBean.setProperties(properties);
//订阅关系
Map<Subscription, MessageListener> subscriptionTable = new HashMap<Subscription, MessageListener>(1);
if(!CollectionUtils.isEmpty(mqSubscriptionConfigList)){
for (MqSubscriptionConfig mqSubscriptionConfig : mqSubscriptionConfigList) {
Subscription subscription = new Subscription();
subscription.setTopic(mqSubscriptionConfig.getTopic());
subscription.setExpression(mqSubscriptionConfig.getExpression());
subscriptionTable.put(subscription, mqSubscriptionConfig.getMessageListener());
}
}
consumerBean.setSubscriptionTable(subscriptionTable);
return consumerBean;
}
private Properties getProperties() {
Properties properties = new Properties();
properties.setProperty(PropertyKeyConst.AccessKey, aliyunAuthConfig.getAccessKey());
properties.setProperty(PropertyKeyConst.SecretKey, aliyunAuthConfig.getSecretKey());
properties.setProperty(PropertyKeyConst.NAMESRV_ADDR, this.nameSrvAddr);
return properties;
}
}
多个consumer可以批量注册
@AllArgsConstructor
@Data
public class MqSubscriptionConfig {
private String Topic;
private String expression;
private MessageListener messageListener;
}
@Bean
public MqSubscriptionConfig cooperationPaymentOrderConfig(){
return new MqSubscriptionConfig("TOPIC_PAYMENT_ORDER", "*", cooperationPaymentOrderListener);
}
@Bean
public MqSubscriptionConfig cooperationSettlementOrderConfig(){
return new MqSubscriptionConfig("TOPIC_SETTLEMENT_ORDER", "*", cooperationSettlementOrderListener);
}
@Bean
public MqSubscriptionConfig captainPromotionLinkConfig(){
return new MqSubscriptionConfig("TOPIC_CAPTAIN_PROMOTION_LINK", "*", captainPromotionLinkListener);
}
public class PaymentOrderListener implements MessageListener {
}