Browse Source

mq注册代码调整

dev_shibei_match
jianjun 4 years ago
parent
commit
4d4d17eed8
  1. 43
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/register/ConsumerConfigProperties.java
  2. 79
      epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/register/MQConsumerRegister.java
  3. 18
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java
  4. 6
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java
  5. 3
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java
  6. 95
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgListener.java
  7. 24
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgRolesListener.java
  8. 22
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/GroupAchievementCustomListener.java
  9. 36
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/GroupAchieventConsumerListener.java
  10. 8
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java

43
epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/register/ConsumerConfigProperties.java

@ -0,0 +1,43 @@
package com.epmet.commons.rocketmq.register;
import lombok.Data;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import java.io.Serializable;
/**
* desc:mq 消费配置类
*
* @author: LiuJanJun
* @date: 2021/4/30 2:39 下午
* @version: 1.0
*/
@Data
public class ConsumerConfigProperties implements Serializable {
private static final long serialVersionUID = 2069676324708473773L;
/**
* 消费者组
*/
private String consumerGroup;
/**
* 主题
*/
private String topic;
/**
* 标签
*/
private String tag = "*";
/**
* 最小消费的线程数
*/
private int consumeThreadMin = 2;
/**
* 最大消费的线程数
*/
private int consumeThreadMax = 4;
/**
* 消费监听器
*/
private MessageListenerConcurrently consumerListener;
}

79
epmet-commons/epmet-commons-rocketmq/src/main/java/com/epmet/commons/rocketmq/register/MQConsumerRegister.java

@ -0,0 +1,79 @@
package com.epmet.commons.rocketmq.register;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
import org.springframework.beans.factory.annotation.Value;
import javax.annotation.PostConstruct;
/**
* desc注册mq监听器
*
* @author liujianjun
*/
@Slf4j
public abstract class MQConsumerRegister {
@Value("${spring.profiles.active}")
private String env;
@Value("${rocketmq.name-server}")
private String namesrvAddr;
public abstract ConsumerConfigProperties getConsumerProperty();
/**
* @return
* @Description 注册监听器
* @author wxz
* @date 2021.03.03 16:09
*/
@PostConstruct
public void registerMQListener() {
ConsumerConfigProperties consumerProperty = getConsumerProperty();
log.info("registerAllListeners consumers:{} success", consumerProperty);
//本地环境不注册
if ("local".equals(env)) {
try {
// 实例化消费者
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerProperty.getConsumerGroup());
// 设置NameServer的地址
consumer.setNamesrvAddr(namesrvAddr);
consumer.setMessageModel(MessageModel.CLUSTERING);
consumer.setInstanceName(buildInstanceName());
// 订阅一个或者多个Topic,以及Tag来过滤需要消费的消息
consumer.subscribe(consumer.getConsumerGroup(), consumerProperty.getTag());
// 注册回调实现类来处理从broker拉取回来的消息
consumer.registerMessageListener(consumerProperty.getConsumerListener());
consumer.setConsumeThreadMin(consumerProperty.getConsumeThreadMin());
consumer.setConsumeThreadMax(consumerProperty.getConsumeThreadMax());
// 启动消费者实例
consumer.start();
} catch (MQClientException e) {
log.info("registerMQListener exception", e);
}
}
}
/**
* desc: 因为docker-compose部署有问题 所有自己命名
*
* @param
* @return java.lang.String
* @author LiuJanJun
* @date 2021/4/30 5:00 下午
*/
private String buildInstanceName() {
String instanceName = "";
for (int i = 0; i < 4; i++) {
int t = (int) (Math.random() * 10);
instanceName = instanceName.concat(t + "");
}
return instanceName;
}
}

18
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/ProjectChangedCustomListener.java

@ -1,7 +1,11 @@
package com.epmet.mq; package com.epmet.mq;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants;
import com.epmet.commons.rocketmq.constants.TopicConstants;
import com.epmet.commons.rocketmq.messages.ProjectChangedMQMsg; import com.epmet.commons.rocketmq.messages.ProjectChangedMQMsg;
import com.epmet.commons.rocketmq.register.ConsumerConfigProperties;
import com.epmet.commons.rocketmq.register.MQConsumerRegister;
import com.epmet.commons.tools.distributedlock.DistributedLock; import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.SpringContextUtils; import com.epmet.commons.tools.utils.SpringContextUtils;
@ -18,6 +22,7 @@ import org.apache.rocketmq.common.message.MessageExt;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy; import javax.annotation.PreDestroy;
import java.util.Date; import java.util.Date;
@ -34,7 +39,8 @@ import java.util.stream.Collectors;
* @date 2021.03.03 16:10 * @date 2021.03.03 16:10
*/ */
@Slf4j @Slf4j
public class ProjectChangedCustomListener implements MessageListenerConcurrently { @Component
public class ProjectChangedCustomListener extends MQConsumerRegister implements MessageListenerConcurrently {
private Logger logger = LoggerFactory.getLogger(getClass()); private Logger logger = LoggerFactory.getLogger(getClass());
@ -115,4 +121,14 @@ public class ProjectChangedCustomListener implements MessageListenerConcurrently
log.info("data-statical-server服务被关闭,执行未执行完的动作"); log.info("data-statical-server服务被关闭,执行未执行完的动作");
} }
@Override
public ConsumerConfigProperties getConsumerProperty() {
ConsumerConfigProperties configProperties = new ConsumerConfigProperties();
configProperties.setConsumerGroup(ConsomerGroupConstants.PROJECT_CHANGED_COMPONENTS_GROUP);
configProperties.setTopic(TopicConstants.PROJECT_CHANGED);
configProperties.setTag("*");
configProperties.setConsumerListener(this);
return configProperties;
}
} }

6
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java

@ -10,14 +10,12 @@ import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel; import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
@Slf4j @Slf4j
@Component //@Component
@Order(value = 111) //@Order(value = 111)
public class RocketMQConsumerRegister { public class RocketMQConsumerRegister {
@Value("${spring.profiles.active}") @Value("${spring.profiles.active}")
private String env; private String env;

3
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java

@ -9,11 +9,10 @@ import org.apache.rocketmq.client.consumer.listener.MessageListener;
import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel; import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
@Component //@Component
public class RocketMQConsumerRegister { public class RocketMQConsumerRegister {
@Value("${spring.profiles.active}") @Value("${spring.profiles.active}")
private String env; private String env;

95
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgListener.java

@ -1,95 +0,0 @@
package com.epmet.mq.listener;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.rocketmq.messages.InitCustomerMQMsg;
import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.constant.UserWorkType;
import com.epmet.dto.CustomerAgencyDTO;
import com.epmet.dto.form.AddAgencyAndStaffFormDTO;
import com.epmet.dto.form.AdminStaffFromDTO;
import com.epmet.service.AgencyService;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.redisson.api.RLock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.concurrent.TimeUnit;
/**
* 监听初始化客户动作为客户初始化角色列表
*/
//@RocketMQMessageListener(topic = TopicConstants.INIT_CUSTOMER,
// consumerGroup = ConsomerGroupConstants.INIT_CUSTOMER_ORG_ROLES_GROUP,
// messageModel = MessageModel.CLUSTERING,
// selectorExpression = "*")
//@Component
public class InitCustomerOrgListener implements RocketMQListener<MessageExt> {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private AgencyService agencyService;
@Autowired
private DistributedLock distributedLock;
@Override
public void onMessage(MessageExt messageExt) {
String msg = new String(messageExt.getBody());
logger.info("初始化客户-初始化组织信息-收到消息内容:{}", msg);
InitCustomerMQMsg msgObj = JSON.parseObject(msg, InitCustomerMQMsg.class);
RLock lock = null;
try {
lock = distributedLock.getLock(String.format("lock:init_customer_org:%s", msgObj.getCustomerId()),
30L, 30l, TimeUnit.SECONDS);
agencyService.saveRootAgency(constructRootAndAgencyDTO(msgObj));
} catch (RenException e) {
// 如果是我们手动抛出的异常,说明在业务可控范围内。目前不需要MQ重试
logger.error("【RocketMQ】初始化客户组织失败:".concat(ExceptionUtils.getErrorStackTrace(e)));
} catch (Exception e) {
// 不是我们自己抛出的异常,可以让MQ重试
logger.error("【RocketMQ】初始化客户组织失败:".concat(ExceptionUtils.getErrorStackTrace(e)));
throw e;
} finally {
distributedLock.unLock(lock);
}
}
/**
* @Description 构造dto
* @return
* @author wxz
* @date 2021.01.06 15:03
*/
private AddAgencyAndStaffFormDTO constructRootAndAgencyDTO(InitCustomerMQMsg msgObj) {
AddAgencyAndStaffFormDTO agencyAndStaff = new AddAgencyAndStaffFormDTO();
//客户组织信息
CustomerAgencyDTO agencyDTO = new CustomerAgencyDTO();
agencyDTO.setId(msgObj.getAgency().getAgencyId());
agencyDTO.setCustomerId(msgObj.getCustomerId());
agencyDTO.setOrganizationName(msgObj.getAgency().getOrganizationName());
agencyDTO.setLevel(msgObj.getAgency().getLevel());
agencyDTO.setAreaCode(msgObj.getAgency().getAreaCode());
agencyDTO.setProvince(msgObj.getAgency().getProvince());
agencyDTO.setCity(msgObj.getAgency().getCity());
agencyDTO.setDistrict(msgObj.getAgency().getDistrict());
agencyAndStaff.setAgencyDTO(agencyDTO);
//客户管理员信息
AdminStaffFromDTO staffSubmitFrom = new AdminStaffFromDTO();
staffSubmitFrom.setCustomerId(msgObj.getCustomerId());
staffSubmitFrom.setAgencyId(msgObj.getStaff().getAgencyId());
staffSubmitFrom.setGender(msgObj.getStaff().getGender());
staffSubmitFrom.setMobile(msgObj.getStaff().getMobile());
staffSubmitFrom.setName(msgObj.getStaff().getName());
staffSubmitFrom.setWorkType(UserWorkType.FULL_TIME);
agencyAndStaff.setStaffDTO(staffSubmitFrom);
return agencyAndStaff;
}
}

24
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/mq/listener/InitCustomerOrgRolesListener.java

@ -1,7 +1,11 @@
package com.epmet.mq.listener; package com.epmet.mq.listener;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants;
import com.epmet.commons.rocketmq.constants.TopicConstants;
import com.epmet.commons.rocketmq.messages.InitCustomerMQMsg; import com.epmet.commons.rocketmq.messages.InitCustomerMQMsg;
import com.epmet.commons.rocketmq.register.ConsumerConfigProperties;
import com.epmet.commons.rocketmq.register.MQConsumerRegister;
import com.epmet.commons.tools.distributedlock.DistributedLock; import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
@ -18,17 +22,19 @@ import org.apache.rocketmq.common.message.MessageExt;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
* @author wxz
* @Description 创建客户-组织和角色监听器 * @Description 创建客户-组织和角色监听器
* @return * @return
* @author wxz
* @date 2021.03.03 16:10 * @date 2021.03.03 16:10
*/ */
public class InitCustomerOrgRolesListener implements MessageListenerConcurrently { @Component
public class InitCustomerOrgRolesListener extends MQConsumerRegister implements MessageListenerConcurrently {
private Logger logger = LoggerFactory.getLogger(getClass()); private Logger logger = LoggerFactory.getLogger(getClass());
@ -67,8 +73,8 @@ public class InitCustomerOrgRolesListener implements MessageListenerConcurrently
} }
/** /**
* @Description 构造dto
* @return * @return
* @Description 构造dto
* @author wxz * @author wxz
* @date 2021.01.06 15:03 * @date 2021.01.06 15:03
*/ */
@ -98,4 +104,14 @@ public class InitCustomerOrgRolesListener implements MessageListenerConcurrently
return agencyAndStaff; return agencyAndStaff;
} }
@Override
public ConsumerConfigProperties getConsumerProperty() {
ConsumerConfigProperties configProperties = new ConsumerConfigProperties();
configProperties.setConsumerGroup(ConsomerGroupConstants.INIT_CUSTOMER_ORG_ROLES_GROUP);
configProperties.setTopic(TopicConstants.INIT_CUSTOMER);
configProperties.setTag("*");
configProperties.setConsumerListener(this);
return configProperties;
}
} }

22
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/type1/GroupAchievementCustomListener.java → epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/GroupAchievementCustomListener.java

@ -1,7 +1,11 @@
package com.epmet.mq.type1; package com.epmet.mq;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants;
import com.epmet.commons.rocketmq.constants.TopicConstants;
import com.epmet.commons.rocketmq.messages.GroupAchievementMQMsg; import com.epmet.commons.rocketmq.messages.GroupAchievementMQMsg;
import com.epmet.commons.rocketmq.register.ConsumerConfigProperties;
import com.epmet.commons.rocketmq.register.MQConsumerRegister;
import com.epmet.commons.tools.distributedlock.DistributedLock; import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.SpringContextUtils; import com.epmet.commons.tools.utils.SpringContextUtils;
@ -15,6 +19,7 @@ import org.apache.rocketmq.common.message.MessageExt;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -26,7 +31,8 @@ import java.util.concurrent.TimeUnit;
* @date 2021.03.03 16:10 * @date 2021.03.03 16:10
*/ */
@Slf4j @Slf4j
public class GroupAchievementCustomListener implements MessageListenerConcurrently { @Component
public class GroupAchievementCustomListener extends MQConsumerRegister implements MessageListenerConcurrently {
private Logger logger = LoggerFactory.getLogger(getClass()); private Logger logger = LoggerFactory.getLogger(getClass());
@ -82,4 +88,16 @@ public class GroupAchievementCustomListener implements MessageListenerConcurrent
} }
} }
} }
@Override
public ConsumerConfigProperties getConsumerProperty() {
ConsumerConfigProperties configProperties = new ConsumerConfigProperties();
configProperties.setConsumerGroup(ConsomerGroupConstants.GROUP_ACHIEVEMENT_COMPONENTS_GROUP);
configProperties.setTopic(TopicConstants.GROUP_ACHIEVEMENT);
configProperties.setTag("*");
configProperties.setConsumerListener(this);
return configProperties;
}
} }

36
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/GroupAchieventConsumerListener.java

@ -1,36 +0,0 @@
package com.epmet.mq;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.rocketmq.messages.GroupAchievementMQMsg;
import com.epmet.modules.group.service.StatsAchievementService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired;
/**
* desc: 小组成就mq监听
*
* @author: LiuJanJun
* @date: 2021/4/22 10:10 下午
* @version: 1.0
*/
@Slf4j
//@Component
//@RocketMQMessageListener(topic = "group_achievement", consumerGroup = ConsomerGroupConstants.GROUP_ACHIEVEMENT_COMPONENTS_GROUP)
public class GroupAchieventConsumerListener implements RocketMQListener<GroupAchievementMQMsg> {
@Autowired
private StatsAchievementService statsAchievementService;
@Override
public void onMessage(GroupAchievementMQMsg msg) {
log.info("receive msg:{}", JSON.toJSONString(msg));
if (StringUtils.isBlank(msg.getAchievementType()) || StringUtils.isBlank(msg.getCustomerId())
|| StringUtils.isBlank(msg.getGroupId())) {
log.error("consumer groupAchievement fail,msg:{}", msg);
return;
}
Boolean aBoolean = statsAchievementService.calculateAcm(msg.getCustomerId(), msg.getGroupId(), msg.getAchievementType());
log.info("consumer groupAchievement msg success,{}", aBoolean);
}
}

8
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/type1/RocketMQConsumerRegister.java → epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/mq/RocketMQConsumerRegister.java

@ -1,4 +1,4 @@
package com.epmet.mq.type1; package com.epmet.mq;
import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants; import com.epmet.commons.rocketmq.constants.ConsomerGroupConstants;
import com.epmet.commons.rocketmq.constants.TopicConstants; import com.epmet.commons.rocketmq.constants.TopicConstants;
@ -9,12 +9,11 @@ import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel; import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
@Slf4j @Slf4j
@Component //@Component
public class RocketMQConsumerRegister { public class RocketMQConsumerRegister {
@Value("${spring.profiles.active}") @Value("${spring.profiles.active}")
private String env; private String env;
@ -30,7 +29,7 @@ public class RocketMQConsumerRegister {
@PostConstruct @PostConstruct
public void registerAllListeners() { public void registerAllListeners() {
try { try {
if (!EnvEnum.LOCAL.getCode().equals(env)){ if (!EnvEnum.LOCAL.getCode().equals(env)) {
register(ConsomerGroupConstants.GROUP_ACHIEVEMENT_COMPONENTS_GROUP, MessageModel.CLUSTERING, TopicConstants.GROUP_ACHIEVEMENT, "*", new GroupAchievementCustomListener()); register(ConsomerGroupConstants.GROUP_ACHIEVEMENT_COMPONENTS_GROUP, MessageModel.CLUSTERING, TopicConstants.GROUP_ACHIEVEMENT, "*", new GroupAchievementCustomListener());
} }
} catch (MQClientException e) { } catch (MQClientException e) {
@ -48,6 +47,7 @@ public class RocketMQConsumerRegister {
consumer.setInstanceName(buildInstanceName()); consumer.setInstanceName(buildInstanceName());
// 订阅一个或者多个Topic,以及Tag来过滤需要消费的消息 // 订阅一个或者多个Topic,以及Tag来过滤需要消费的消息
consumer.subscribe(topic, subException); consumer.subscribe(topic, subException);
consumer.setConsumeMessageBatchMaxSize(10);
// 注册回调实现类来处理从broker拉取回来的消息 // 注册回调实现类来处理从broker拉取回来的消息
consumer.registerMessageListener(listener); consumer.registerMessageListener(listener);
// 启动消费者实例 // 启动消费者实例
Loading…
Cancel
Save