|
@@ -1,7 +1,10 @@
|
|
package com.qmth.distributed.print.config;
|
|
package com.qmth.distributed.print.config;
|
|
|
|
|
|
|
|
+import com.google.gson.Gson;
|
|
import com.qmth.teachcloud.common.bean.dto.MqDto;
|
|
import com.qmth.teachcloud.common.bean.dto.MqDto;
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
|
+import com.qmth.teachcloud.common.entity.TMMqMessage;
|
|
|
|
+import com.qmth.teachcloud.common.service.TMMqMessageService;
|
|
import com.qmth.teachcloud.common.util.JacksonUtil;
|
|
import com.qmth.teachcloud.common.util.JacksonUtil;
|
|
import com.qmth.teachcloud.common.util.RedisUtil;
|
|
import com.qmth.teachcloud.common.util.RedisUtil;
|
|
import org.apache.commons.text.StringEscapeUtils;
|
|
import org.apache.commons.text.StringEscapeUtils;
|
|
@@ -23,6 +26,9 @@ public class RedisMessageListener implements MessageListener {
|
|
@Resource
|
|
@Resource
|
|
RedisUtil redisUtil;
|
|
RedisUtil redisUtil;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ TMMqMessageService tmMqMessageService;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public void onMessage(Message message, byte[] bytes) {
|
|
public void onMessage(Message message, byte[] bytes) {
|
|
MqDto mqDto = null;
|
|
MqDto mqDto = null;
|
|
@@ -33,15 +39,14 @@ public class RedisMessageListener implements MessageListener {
|
|
if (Objects.nonNull(body)) {
|
|
if (Objects.nonNull(body)) {
|
|
mqDto = JacksonUtil.readJson(body.substring(1, body.length() - 1), MqDto.class);
|
|
mqDto = JacksonUtil.readJson(body.substring(1, body.length() - 1), MqDto.class);
|
|
for (; integer.get() < mqDto.getReconsume(); integer.incrementAndGet()) {
|
|
for (; integer.get() < mqDto.getReconsume(); integer.incrementAndGet()) {
|
|
|
|
+ log.info("integer:{}", integer.get());
|
|
if (Objects.nonNull(mqDto.getAck()) && mqDto.getAck().intValue() != SystemConstant.STANDARD_ACK_TYPE
|
|
if (Objects.nonNull(mqDto.getAck()) && mqDto.getAck().intValue() != SystemConstant.STANDARD_ACK_TYPE
|
|
&& redisUtil.lock(SystemConstant.REDIS_LOCK_MQ_PREFIX + mqDto.getId(),
|
|
&& redisUtil.lock(SystemConstant.REDIS_LOCK_MQ_PREFIX + mqDto.getId(),
|
|
SystemConstant.REDIS_LOCK_MQ_TIME_OUT)) {
|
|
SystemConstant.REDIS_LOCK_MQ_TIME_OUT)) {
|
|
//通道
|
|
//通道
|
|
- String channel = new String(message.getChannel(), SystemConstant.CHARSET_NAME);
|
|
|
|
- //渠道名称
|
|
|
|
- String topic = new String(bytes, SystemConstant.CHARSET_NAME);
|
|
|
|
|
|
+ String topic = new String(message.getChannel(), SystemConstant.CHARSET_NAME);
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
- log.info("mqDto:{},topic:{},channel:{}", JacksonUtil.parseJson(mqDto), JacksonUtil.parseJson(topic), JacksonUtil.parseJson(channel));
|
|
|
|
|
|
+ log.info("mqDto:{},topic:{}", JacksonUtil.parseJson(mqDto), JacksonUtil.parseJson(topic));
|
|
break;
|
|
break;
|
|
} else {
|
|
} else {
|
|
mqDto.setAck(SystemConstant.REDELIVERED_ACK_TYPE);
|
|
mqDto.setAck(SystemConstant.REDELIVERED_ACK_TYPE);
|
|
@@ -52,17 +57,17 @@ public class RedisMessageListener implements MessageListener {
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
log.error("redis mq消息监听,消息消费出错", e);
|
|
log.error("redis mq消息监听,消息消费出错", e);
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
- if (Objects.nonNull(mqDto)) {
|
|
|
|
- mqDto.setAck(SystemConstant.POSION_ACK_TYPE);
|
|
|
|
- integer.set(3);
|
|
|
|
- }
|
|
|
|
|
|
+ integer.set(SystemConstant.REDIS_MQ_MAX_RECONSUME);
|
|
} finally {
|
|
} finally {
|
|
- if (integer.get() == 3 && Objects.nonNull(mqDto)) {
|
|
|
|
|
|
+ if (integer.get() == SystemConstant.REDIS_MQ_MAX_RECONSUME && Objects.nonNull(mqDto)) {//存入库
|
|
|
|
+ Gson gson = new Gson();
|
|
mqDto.setAck(SystemConstant.POSION_ACK_TYPE);
|
|
mqDto.setAck(SystemConstant.POSION_ACK_TYPE);
|
|
- //存入库
|
|
|
|
|
|
+ TMMqMessage tmMqMessage = gson.fromJson(gson.toJson(mqDto), TMMqMessage.class);
|
|
|
|
+ tmMqMessage.setBody(JacksonUtil.parseJson(tmMqMessage.getBody()));
|
|
|
|
+ tmMqMessageService.saveOrUpdate(tmMqMessage);
|
|
}
|
|
}
|
|
- if (Objects.nonNull(mqDto) && mqDto.getAck().intValue() == SystemConstant.STANDARD_ACK_TYPE
|
|
|
|
- || mqDto.getAck().intValue() == SystemConstant.POSION_ACK_TYPE) {
|
|
|
|
|
|
+ if (Objects.nonNull(mqDto) && (mqDto.getAck().intValue() == SystemConstant.STANDARD_ACK_TYPE
|
|
|
|
+ || mqDto.getAck().intValue() == SystemConstant.POSION_ACK_TYPE)) {
|
|
redisUtil.releaseLock(SystemConstant.REDIS_LOCK_MQ_PREFIX + mqDto.getId());
|
|
redisUtil.releaseLock(SystemConstant.REDIS_LOCK_MQ_PREFIX + mqDto.getId());
|
|
}
|
|
}
|
|
}
|
|
}
|